@kywi-software/core 0.12.1 → 0.13.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/AGENT-PATTERNS.md +54 -39
- package/dist/admin/layout-editor/component-actions.d.ts +21 -1
- package/dist/admin/layout-editor/component-actions.d.ts.map +1 -1
- package/dist/admin/layout-editor/component-actions.js +41 -1
- package/dist/admin/layout-editor/component-actions.js.map +1 -1
- package/dist/admin/layout-editor/component-fork.d.ts.map +1 -1
- package/dist/admin/layout-editor/component-fork.js +23 -1
- package/dist/admin/layout-editor/component-fork.js.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.d.ts +17 -0
- package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.js +178 -38
- package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
- package/dist/admin/layout-editor/editor-state.d.ts +62 -2
- package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-state.js +181 -11
- package/dist/admin/layout-editor/editor-state.js.map +1 -1
- package/dist/admin/layout-editor/editor.css +59 -0
- package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
- package/dist/admin/layout-editor/layout-editor.js +67 -3
- package/dist/admin/layout-editor/layout-editor.js.map +1 -1
- package/dist/admin/layout-editor/module-overlay.d.ts +21 -1
- package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/module-overlay.js +4 -4
- package/dist/admin/layout-editor/module-overlay.js.map +1 -1
- package/dist/admin/layout-editor/module-palette.d.ts +1 -0
- package/dist/admin/layout-editor/module-palette.d.ts.map +1 -1
- package/dist/admin/layout-editor/module-palette.js +6 -3
- package/dist/admin/layout-editor/module-palette.js.map +1 -1
- package/dist/admin/layout-editor/module-variant-container-config.d.ts +51 -0
- package/dist/admin/layout-editor/module-variant-container-config.d.ts.map +1 -0
- package/dist/admin/layout-editor/module-variant-container-config.js +51 -0
- package/dist/admin/layout-editor/module-variant-container-config.js.map +1 -0
- package/dist/admin/layout-editor/node-lookup.d.ts +38 -1
- package/dist/admin/layout-editor/node-lookup.d.ts.map +1 -1
- package/dist/admin/layout-editor/node-lookup.js +62 -5
- package/dist/admin/layout-editor/node-lookup.js.map +1 -1
- package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
- package/dist/admin/layout-editor/overlay-shell.js +45 -2
- package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
- package/dist/admin/layout-editor/props-panel.d.ts +50 -3
- package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
- package/dist/admin/layout-editor/props-panel.js +93 -8
- package/dist/admin/layout-editor/props-panel.js.map +1 -1
- package/dist/admin/layout-editor/section-overlay.d.ts +5 -0
- package/dist/admin/layout-editor/section-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/section-overlay.js +1 -1
- package/dist/admin/layout-editor/section-overlay.js.map +1 -1
- package/dist/admin/layout-editor/section-variant-container-config.d.ts +9 -0
- package/dist/admin/layout-editor/section-variant-container-config.d.ts.map +1 -1
- package/dist/admin/layout-editor/section-variant-container-config.js +9 -2
- package/dist/admin/layout-editor/section-variant-container-config.js.map +1 -1
- package/dist/admin/layout-editor/use-component-connect.d.ts.map +1 -1
- package/dist/admin/layout-editor/use-component-connect.js +55 -1
- package/dist/admin/layout-editor/use-component-connect.js.map +1 -1
- package/dist/admin/surfaces/components/definition-canvas.d.ts.map +1 -1
- package/dist/admin/surfaces/components/definition-canvas.js +30 -0
- package/dist/admin/surfaces/components/definition-canvas.js.map +1 -1
- package/dist/audiences/deletion-guard.js +2 -2
- package/dist/audiences/deletion-guard.js.map +1 -1
- package/dist/config/types.d.ts +7 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/layout/component-refs.d.ts.map +1 -1
- package/dist/layout/component-refs.js +10 -18
- package/dist/layout/component-refs.js.map +1 -1
- package/dist/layout/feed-hydration.js +2 -3
- package/dist/layout/feed-hydration.js.map +1 -1
- package/dist/layout/index.d.ts +2 -1
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/index.js +4 -1
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/module-permissions.js +2 -2
- package/dist/layout/module-permissions.js.map +1 -1
- package/dist/layout/nav-hydration.js +2 -3
- package/dist/layout/nav-hydration.js.map +1 -1
- package/dist/layout/personalization.d.ts +29 -0
- package/dist/layout/personalization.d.ts.map +1 -1
- package/dist/layout/personalization.js +78 -0
- package/dist/layout/personalization.js.map +1 -1
- package/dist/layout/registry.d.ts.map +1 -1
- package/dist/layout/registry.js +15 -1
- package/dist/layout/registry.js.map +1 -1
- package/dist/layout/renderer.d.ts +2 -12
- package/dist/layout/renderer.d.ts.map +1 -1
- package/dist/layout/renderer.js +29 -25
- package/dist/layout/renderer.js.map +1 -1
- package/dist/layout/types.d.ts +91 -1
- package/dist/layout/types.d.ts.map +1 -1
- package/dist/layout/types.js +160 -1
- package/dist/layout/types.js.map +1 -1
- package/dist/layout/variant-selection.d.ts +43 -0
- package/dist/layout/variant-selection.d.ts.map +1 -0
- package/dist/layout/variant-selection.js +41 -0
- package/dist/layout/variant-selection.js.map +1 -0
- package/package.json +1 -1
package/dist/layout/renderer.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { createContext, useContext } from 'react';
|
|
4
|
-
import { isLayoutSection } from './types.js';
|
|
4
|
+
import { isLayoutSection, isModuleVariantContainer } from './types.js';
|
|
5
5
|
import { applySectionPlacement, applyVariantContainerPlacement, resolveModulePlacement, } from './component-refs.js';
|
|
6
6
|
import { BUILT_IN_MODULE_COMPONENTS } from './modules.js';
|
|
7
7
|
import { resolveSectionStyle } from './theme-css.js';
|
|
8
|
+
import { selectVariantArm } from './variant-selection.js';
|
|
8
9
|
const PersonalizationContext = createContext(null);
|
|
9
10
|
const ComponentResolverContext = createContext(null);
|
|
10
11
|
const SectionComponentResolverContext = createContext(null);
|
|
@@ -43,31 +44,11 @@ export function KywiRegion({ name, fallback }) {
|
|
|
43
44
|
}
|
|
44
45
|
// ── Variant Container (audience + A/B experiment) ────────────────────────────
|
|
45
46
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* otherwise, in A/B mode, a locked winner or the visitor's experiment
|
|
49
|
-
* assignment selects the arm. Returns null to render the Default sections.
|
|
47
|
+
* Which VariantEntry a section-level container renders. Thin wrapper over the
|
|
48
|
+
* shared {@link selectVariantArm} so the two container kinds cannot drift.
|
|
50
49
|
*/
|
|
51
50
|
function selectVariantEntry(container, state) {
|
|
52
|
-
|
|
53
|
-
if (state?.resolvedAudienceId) {
|
|
54
|
-
const byAudience = container.variants.find(v => v.audienceId === state.resolvedAudienceId);
|
|
55
|
-
if (byAudience)
|
|
56
|
-
return byAudience;
|
|
57
|
-
}
|
|
58
|
-
if (container.mode === 'ab_test') {
|
|
59
|
-
// A completed experiment routes all traffic to its winner.
|
|
60
|
-
if (container.winnerId) {
|
|
61
|
-
return container.variants.find(v => v.audienceId === container.winnerId) ?? null;
|
|
62
|
-
}
|
|
63
|
-
// Otherwise use the server-resolved experiment assignment for this visitor.
|
|
64
|
-
if (container.experimentId && state) {
|
|
65
|
-
const key = state.experimentAssignments[container.experimentId];
|
|
66
|
-
if (key)
|
|
67
|
-
return container.variants.find(v => v.audienceId === key) ?? null;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return null;
|
|
51
|
+
return selectVariantArm(container.variants, container, state);
|
|
71
52
|
}
|
|
72
53
|
function VariantContainerRenderer({ container }) {
|
|
73
54
|
const state = useContext(PersonalizationContext);
|
|
@@ -94,6 +75,27 @@ function VariantContainerRenderer({ container }) {
|
|
|
94
75
|
const variantKey = selected ? selected.audienceId : 'default';
|
|
95
76
|
return (_jsx("div", { className: "kywi-variant-container", "data-variant-container-id": container.id, "data-variant": variantKey, ...(effective.experimentId ? { 'data-experiment': effective.experimentId } : {}), ...(container.componentId ? { 'data-component-id': container.componentId } : {}), children: sections.map(section => _jsx(SectionRenderer, { section: section }, section.id)) }));
|
|
96
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* A MODULE-level variant container: one module in a column that varies by
|
|
80
|
+
* audience or A/B arm (kywi-cms#161).
|
|
81
|
+
*
|
|
82
|
+
* Entirely server-resolved, exactly like its section-level sibling — no
|
|
83
|
+
* client-side arm swapping, so the first paint is already correct and the page
|
|
84
|
+
* is complete with JavaScript off. The winning arm's module renders through the
|
|
85
|
+
* ordinary `ModuleRenderer`, so a promoted module is byte-identical to the one
|
|
86
|
+
* it replaced apart from this wrapper.
|
|
87
|
+
*/
|
|
88
|
+
function ModuleVariantContainerRenderer({ container }) {
|
|
89
|
+
const state = useContext(PersonalizationContext);
|
|
90
|
+
const selected = selectVariantArm(container.variants, container, state);
|
|
91
|
+
const node = selected ? selected.module : container.defaultModule;
|
|
92
|
+
// `selected.audienceId` is always set, and never empty: `selectVariantArm`
|
|
93
|
+
// only ever returns an arm it MATCHED by that field — against the resolved
|
|
94
|
+
// audience, the locked winner, or the experiment assignment — so an arm with
|
|
95
|
+
// no binding (`''`, the draft spelling) cannot be the one selected here.
|
|
96
|
+
const variantKey = selected ? selected.audienceId : 'default';
|
|
97
|
+
return (_jsx("div", { className: "kywi-module-variant-container", "data-module-variant-container-id": container.id, "data-variant": variantKey, ...(container.experimentId ? { 'data-experiment': container.experimentId } : {}), children: _jsx(ModuleRenderer, { node: node }) }));
|
|
98
|
+
}
|
|
97
99
|
function SectionRenderer({ section }) {
|
|
98
100
|
const sectionResolver = useContext(SectionComponentResolverContext);
|
|
99
101
|
// A connected section (`componentId`) renders its source component's
|
|
@@ -119,7 +121,9 @@ function SectionRenderer({ section }) {
|
|
|
119
121
|
return (_jsxs("div", { className: "kywi-section", "data-kywi-section": "", "data-section-id": section.id, ...(section.componentId ? { 'data-component-id': section.componentId } : {}), style: Object.keys(base).length > 0 ? base : undefined, children: [responsiveCss && _jsx("style", { dangerouslySetInnerHTML: { __html: responsiveCss } }), _jsx("div", { className: "kywi-section-columns", children: effective.columns.map(col => _jsx(ColumnRenderer, { column: col }, col.id)) })] }));
|
|
120
122
|
}
|
|
121
123
|
function ColumnRenderer({ column }) {
|
|
122
|
-
return (_jsx("div", { className: `kywi-column kywi-col-${column.width}`, "data-kywi-column": "", "data-kywi-col-width": column.width, "data-column-id": column.id, children: column.nodes.map(node =>
|
|
124
|
+
return (_jsx("div", { className: `kywi-column kywi-col-${column.width}`, "data-kywi-column": "", "data-kywi-col-width": column.width, "data-column-id": column.id, children: column.nodes.map(node => isModuleVariantContainer(node)
|
|
125
|
+
? _jsx(ModuleVariantContainerRenderer, { container: node }, node.id)
|
|
126
|
+
: _jsx(ModuleRenderer, { node: node }, node.id)) }));
|
|
123
127
|
}
|
|
124
128
|
/**
|
|
125
129
|
* The documented semantic hooks a module wrapper carries so a front-end
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/layout/renderer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/layout/renderer.tsx"],"names":[],"mappings":"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"}
|
package/dist/layout/types.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export interface ModuleNode {
|
|
|
9
9
|
export interface LayoutColumn {
|
|
10
10
|
id: string;
|
|
11
11
|
width: number;
|
|
12
|
-
nodes:
|
|
12
|
+
nodes: ColumnNode[];
|
|
13
13
|
}
|
|
14
14
|
export interface LayoutSection {
|
|
15
15
|
id: string;
|
|
@@ -26,6 +26,84 @@ export interface LayoutSection {
|
|
|
26
26
|
*/
|
|
27
27
|
componentId?: string;
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* One arm of a MODULE-level variant container (kywi-cms module-variants).
|
|
31
|
+
*
|
|
32
|
+
* Exactly one module per arm, and the modules may be of DIFFERENT types across
|
|
33
|
+
* arms — an image hero against a text hero is a legitimate A/B. `audienceId` is
|
|
34
|
+
* used in `personalization` mode and as the experiment's variant key in
|
|
35
|
+
* `ab_test` mode (same dual role the section-level `VariantEntry.audienceId`
|
|
36
|
+
* plays); `weight` is advisory, mirroring the section-level container's.
|
|
37
|
+
*
|
|
38
|
+
* `audienceId` is REQUIRED, matching the section-level `VariantEntry`. An
|
|
39
|
+
* OPTIONAL field would give one state two shapes: the shared selector matches
|
|
40
|
+
* arms by `audienceId`, so an arm with the field absent validates and then can
|
|
41
|
+
* never be selected by anything. `''` is the single legal spelling of "unbound
|
|
42
|
+
* draft arm" — it matches no resolved audience, no winner and no assignment
|
|
43
|
+
* key, so the arm is inert until an author binds it, but it is still real
|
|
44
|
+
* content that every walker sees.
|
|
45
|
+
*/
|
|
46
|
+
export interface ModuleVariantEntry {
|
|
47
|
+
id: string;
|
|
48
|
+
label: string;
|
|
49
|
+
audienceId: string;
|
|
50
|
+
weight?: number;
|
|
51
|
+
module: ModuleNode;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A wrapper node that lets ONE module inside a column vary by audience or by
|
|
55
|
+
* A/B arm, without turning its whole section into a personalized band.
|
|
56
|
+
*
|
|
57
|
+
* CONTAINERS NEVER NEST — the same contract the section-level `VariantContainer`
|
|
58
|
+
* carries (`admin/layout-editor/node-lookup.ts`). Its arms hold plain
|
|
59
|
+
* `ModuleNode`s, and one of these may not sit inside a section-level container's
|
|
60
|
+
* arm; `validateLayoutDocument` rejects both shapes.
|
|
61
|
+
*/
|
|
62
|
+
export interface ModuleVariantContainer {
|
|
63
|
+
id: string;
|
|
64
|
+
type: 'moduleVariantContainer';
|
|
65
|
+
mode: 'personalization' | 'ab_test';
|
|
66
|
+
experimentId?: string;
|
|
67
|
+
winnerId?: string;
|
|
68
|
+
defaultModule: ModuleNode;
|
|
69
|
+
variants: ModuleVariantEntry[];
|
|
70
|
+
}
|
|
71
|
+
/** What a column's `nodes` array may hold. */
|
|
72
|
+
export type ColumnNode = ModuleNode | ModuleVariantContainer;
|
|
73
|
+
/**
|
|
74
|
+
* Narrow a column node to a module-level variant container.
|
|
75
|
+
*
|
|
76
|
+
* Structural, not a bare `type ===`: a module's `type` is a registry name a host
|
|
77
|
+
* pack chooses, so a custom module registered as `moduleVariantContainer` would
|
|
78
|
+
* otherwise be misread (the same reasoning as `isRegionNodeShape` in
|
|
79
|
+
* `admin/layout-editor/component-actions.ts`).
|
|
80
|
+
*/
|
|
81
|
+
export declare function isModuleVariantContainer(node: ColumnNode): node is ModuleVariantContainer;
|
|
82
|
+
/** Narrow a column node to a plain module (the complement of the above). */
|
|
83
|
+
export declare function isModuleNode(node: ColumnNode): node is ModuleNode;
|
|
84
|
+
/** Every module a container holds: the Default arm first, then each variant arm. */
|
|
85
|
+
export declare function moduleVariantModules(container: ModuleVariantContainer): ModuleNode[];
|
|
86
|
+
/**
|
|
87
|
+
* Every ModuleNode in a column, arm modules included, in document order.
|
|
88
|
+
*
|
|
89
|
+
* THE seam. Every pass that used to read `column.nodes` as a flat module list —
|
|
90
|
+
* the admin-only gate, feed/nav hydration, the audience deletion guard, the
|
|
91
|
+
* linked-component index — reads this instead, so a module inside an arm is
|
|
92
|
+
* governed by exactly the rules a module beside it is.
|
|
93
|
+
*
|
|
94
|
+
* `nodes` is guarded because those passes run over STORED documents that never
|
|
95
|
+
* went through `validateLayoutDocument` — `api/layout-write-guard.ts` types its
|
|
96
|
+
* `stored` as `LayoutDocument | null | undefined` over raw DB JSON. A legacy row
|
|
97
|
+
* with a column missing `nodes` yielded nothing before this function existed;
|
|
98
|
+
* throwing here would 500 the save and leave that page permanently unsavable.
|
|
99
|
+
*/
|
|
100
|
+
export declare function columnModules(column: LayoutColumn): ModuleNode[];
|
|
101
|
+
/**
|
|
102
|
+
* Rebuild a column node by applying `fn` to every ModuleNode it holds — itself
|
|
103
|
+
* for a plain module, each arm's module for a container. The container's own
|
|
104
|
+
* identity (`id`, `mode`, experiment binding, arm ids/labels) is untouched.
|
|
105
|
+
*/
|
|
106
|
+
export declare function mapColumnNode(node: ColumnNode, fn: (module: ModuleNode) => ModuleNode): ColumnNode;
|
|
29
107
|
export interface VariantEntry {
|
|
30
108
|
id: string;
|
|
31
109
|
audienceId: string;
|
|
@@ -118,4 +196,16 @@ export declare function validateLayoutSection(input: unknown): LayoutSectionVali
|
|
|
118
196
|
* default and variant section.
|
|
119
197
|
*/
|
|
120
198
|
export declare function validateVariantContainer(input: unknown): VariantContainerValidationResult;
|
|
199
|
+
export type ModuleVariantContainerValidationResult = {
|
|
200
|
+
success: true;
|
|
201
|
+
data: ModuleVariantContainer;
|
|
202
|
+
} | {
|
|
203
|
+
success: false;
|
|
204
|
+
error: string;
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* The module-level counterpart of {@link validateVariantContainer}: schema, the
|
|
208
|
+
* ab_test/experimentId rule, and unique arm ids.
|
|
209
|
+
*/
|
|
210
|
+
export declare function validateModuleVariantContainer(input: unknown): ModuleVariantContainerValidationResult;
|
|
121
211
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,aAAa,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,kBAAkB,CAAA;IACxB,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAA;IACnC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,aAAa,EAAE,CAAA;IAChC,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,gBAAgB,CAAA;AAEzD,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,IAAI,aAAa,CAEvE;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAA;QACV,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;KACtC,CAAC,CAAA;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;IACrC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAA;IAC5B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;CAC/B;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"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"}
|
package/dist/layout/types.js
CHANGED
|
@@ -1,4 +1,67 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Narrow a column node to a module-level variant container.
|
|
4
|
+
*
|
|
5
|
+
* Structural, not a bare `type ===`: a module's `type` is a registry name a host
|
|
6
|
+
* pack chooses, so a custom module registered as `moduleVariantContainer` would
|
|
7
|
+
* otherwise be misread (the same reasoning as `isRegionNodeShape` in
|
|
8
|
+
* `admin/layout-editor/component-actions.ts`).
|
|
9
|
+
*/
|
|
10
|
+
export function isModuleVariantContainer(node) {
|
|
11
|
+
return (node.type === 'moduleVariantContainer' &&
|
|
12
|
+
Array.isArray(node.variants) &&
|
|
13
|
+
typeof node.defaultModule === 'object' &&
|
|
14
|
+
// `typeof null === 'object'`: without this a `defaultModule: null` node
|
|
15
|
+
// narrows to a container, and `columnModules` pushes that null into a
|
|
16
|
+
// `ModuleNode[]` every downstream walker then dereferences.
|
|
17
|
+
node.defaultModule !== null);
|
|
18
|
+
}
|
|
19
|
+
/** Narrow a column node to a plain module (the complement of the above). */
|
|
20
|
+
export function isModuleNode(node) {
|
|
21
|
+
return !isModuleVariantContainer(node);
|
|
22
|
+
}
|
|
23
|
+
/** Every module a container holds: the Default arm first, then each variant arm. */
|
|
24
|
+
export function moduleVariantModules(container) {
|
|
25
|
+
return [container.defaultModule, ...container.variants.map(v => v.module)];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Every ModuleNode in a column, arm modules included, in document order.
|
|
29
|
+
*
|
|
30
|
+
* THE seam. Every pass that used to read `column.nodes` as a flat module list —
|
|
31
|
+
* the admin-only gate, feed/nav hydration, the audience deletion guard, the
|
|
32
|
+
* linked-component index — reads this instead, so a module inside an arm is
|
|
33
|
+
* governed by exactly the rules a module beside it is.
|
|
34
|
+
*
|
|
35
|
+
* `nodes` is guarded because those passes run over STORED documents that never
|
|
36
|
+
* went through `validateLayoutDocument` — `api/layout-write-guard.ts` types its
|
|
37
|
+
* `stored` as `LayoutDocument | null | undefined` over raw DB JSON. A legacy row
|
|
38
|
+
* with a column missing `nodes` yielded nothing before this function existed;
|
|
39
|
+
* throwing here would 500 the save and leave that page permanently unsavable.
|
|
40
|
+
*/
|
|
41
|
+
export function columnModules(column) {
|
|
42
|
+
const out = [];
|
|
43
|
+
for (const node of column.nodes ?? []) {
|
|
44
|
+
if (isModuleVariantContainer(node))
|
|
45
|
+
out.push(...moduleVariantModules(node));
|
|
46
|
+
else
|
|
47
|
+
out.push(node);
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Rebuild a column node by applying `fn` to every ModuleNode it holds — itself
|
|
53
|
+
* for a plain module, each arm's module for a container. The container's own
|
|
54
|
+
* identity (`id`, `mode`, experiment binding, arm ids/labels) is untouched.
|
|
55
|
+
*/
|
|
56
|
+
export function mapColumnNode(node, fn) {
|
|
57
|
+
if (!isModuleVariantContainer(node))
|
|
58
|
+
return fn(node);
|
|
59
|
+
return {
|
|
60
|
+
...node,
|
|
61
|
+
defaultModule: fn(node.defaultModule),
|
|
62
|
+
variants: node.variants.map(v => ({ ...v, module: fn(v.module) })),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
2
65
|
/** Narrow a RegionNode to a LayoutSection (as opposed to a VariantContainer). */
|
|
3
66
|
export function isLayoutSection(node) {
|
|
4
67
|
return node.type === 'section';
|
|
@@ -16,10 +79,44 @@ const ModuleNodeSchema = z.object({
|
|
|
16
79
|
style: z.record(z.string()),
|
|
17
80
|
componentId: z.string().optional(),
|
|
18
81
|
});
|
|
82
|
+
const ModuleVariantEntrySchema = z.object({
|
|
83
|
+
id: z.string(),
|
|
84
|
+
label: z.string(),
|
|
85
|
+
// Required, not `.optional()` — see ModuleVariantEntry: `''` is the unbound
|
|
86
|
+
// draft arm, and an absent field is a second shape for that same state that
|
|
87
|
+
// the selector could never match.
|
|
88
|
+
audienceId: z.string(),
|
|
89
|
+
weight: z.number().optional(),
|
|
90
|
+
module: ModuleNodeSchema,
|
|
91
|
+
});
|
|
92
|
+
/**
|
|
93
|
+
* The module-variant-container field list. A bare `ZodObject` for the same
|
|
94
|
+
* reason `VariantContainerObjectSchema` is one: it has to compose into the
|
|
95
|
+
* column-node union below, so the ab_test/experimentId rule lives on the
|
|
96
|
+
* exported wrapper and in `validateModuleVariantContainerNode`, which runs on
|
|
97
|
+
* every container `validateLayoutDocument` walks.
|
|
98
|
+
*/
|
|
99
|
+
const ModuleVariantContainerObjectSchema = z.object({
|
|
100
|
+
id: z.string(),
|
|
101
|
+
type: z.literal('moduleVariantContainer'),
|
|
102
|
+
mode: z.enum(['personalization', 'ab_test']),
|
|
103
|
+
experimentId: z.string().optional(),
|
|
104
|
+
winnerId: z.string().optional(),
|
|
105
|
+
defaultModule: ModuleNodeSchema,
|
|
106
|
+
variants: z.array(ModuleVariantEntrySchema),
|
|
107
|
+
});
|
|
108
|
+
// Container FIRST: a container object cannot satisfy ModuleNodeSchema (no
|
|
109
|
+
// instanceId/props/style), but matching on the literal `type` before the
|
|
110
|
+
// open-ended module shape is what makes the union's failure messages readable.
|
|
111
|
+
const ColumnNodeSchema = z.union([
|
|
112
|
+
ModuleVariantContainerObjectSchema,
|
|
113
|
+
ModuleNodeSchema,
|
|
114
|
+
]);
|
|
115
|
+
const ModuleVariantContainerSchema = ModuleVariantContainerObjectSchema.refine((val) => val.mode !== 'ab_test' || (val.experimentId != null && val.experimentId.length > 0), { message: 'experimentId is required when mode is ab_test' });
|
|
19
116
|
const LayoutColumnSchema = z.object({
|
|
20
117
|
id: z.string(),
|
|
21
118
|
width: z.number().int().min(1).max(12),
|
|
22
|
-
nodes: z.array(
|
|
119
|
+
nodes: z.array(ColumnNodeSchema),
|
|
23
120
|
});
|
|
24
121
|
// Cast as ZodType for the same exactOptionalPropertyTypes reason as
|
|
25
122
|
// ModuleNodeSchema above: `.optional()` infers `componentId?: string | undefined`
|
|
@@ -101,6 +198,42 @@ function validateSectionColumns(section, context) {
|
|
|
101
198
|
}
|
|
102
199
|
return null;
|
|
103
200
|
}
|
|
201
|
+
/** The module-level container's own rules: ab_test binding, unique arm ids. */
|
|
202
|
+
function validateModuleVariantContainerNode(container, context) {
|
|
203
|
+
if (container.mode === 'ab_test' && !container.experimentId) {
|
|
204
|
+
return `${context} moduleVariantContainer '${container.id}' with mode ab_test requires experimentId`;
|
|
205
|
+
}
|
|
206
|
+
const seen = new Set();
|
|
207
|
+
for (const variant of container.variants) {
|
|
208
|
+
if (seen.has(variant.id)) {
|
|
209
|
+
return `${context} moduleVariantContainer '${container.id}' has duplicate variant id '${variant.id}'`;
|
|
210
|
+
}
|
|
211
|
+
seen.add(variant.id);
|
|
212
|
+
}
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Every module-level container a section's columns hold.
|
|
217
|
+
*
|
|
218
|
+
* `allowed` is false for the sections inside a SECTION-level variant container's
|
|
219
|
+
* arms: containers never nest, so a module container there is refused outright
|
|
220
|
+
* rather than validated.
|
|
221
|
+
*/
|
|
222
|
+
function validateSectionColumnNodes(section, context, allowed) {
|
|
223
|
+
for (const column of section.columns) {
|
|
224
|
+
for (const node of column.nodes) {
|
|
225
|
+
if (!isModuleVariantContainer(node))
|
|
226
|
+
continue;
|
|
227
|
+
if (!allowed) {
|
|
228
|
+
return `${context} section '${section.id}' holds moduleVariantContainer '${node.id}' inside a variantContainer arm — containers never nest`;
|
|
229
|
+
}
|
|
230
|
+
const err = validateModuleVariantContainerNode(node, `${context} section '${section.id}'`);
|
|
231
|
+
if (err)
|
|
232
|
+
return err;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
104
237
|
/**
|
|
105
238
|
* Validate all sections inside a variantContainer (default + all variants).
|
|
106
239
|
*/
|
|
@@ -109,12 +242,18 @@ function validateVariantContainerSections(vc, context) {
|
|
|
109
242
|
const err = validateSectionColumns(section, `${context} variantContainer '${vc.id}' default`);
|
|
110
243
|
if (err)
|
|
111
244
|
return err;
|
|
245
|
+
const nested = validateSectionColumnNodes(section, `${context} variantContainer '${vc.id}'`, false);
|
|
246
|
+
if (nested)
|
|
247
|
+
return nested;
|
|
112
248
|
}
|
|
113
249
|
for (const variant of vc.variants) {
|
|
114
250
|
for (const section of variant.sections) {
|
|
115
251
|
const err = validateSectionColumns(section, `${context} variantContainer '${vc.id}' variant '${variant.id}'`);
|
|
116
252
|
if (err)
|
|
117
253
|
return err;
|
|
254
|
+
const nested = validateSectionColumnNodes(section, `${context} variantContainer '${vc.id}'`, false);
|
|
255
|
+
if (nested)
|
|
256
|
+
return nested;
|
|
118
257
|
}
|
|
119
258
|
}
|
|
120
259
|
// ab_test mode requires experimentId (belt-and-suspenders: schema refine already checks)
|
|
@@ -134,6 +273,9 @@ function validateRegionNodes(regions, contextPrefix) {
|
|
|
134
273
|
const err = validateSectionColumns(node, `${contextPrefix} region '${regionName}'`);
|
|
135
274
|
if (err)
|
|
136
275
|
return err;
|
|
276
|
+
const nodeErr = validateSectionColumnNodes(node, `${contextPrefix} region '${regionName}'`, true);
|
|
277
|
+
if (nodeErr)
|
|
278
|
+
return nodeErr;
|
|
137
279
|
}
|
|
138
280
|
else if (node.type === 'variantContainer') {
|
|
139
281
|
const err = validateVariantContainerSections(node, `${contextPrefix} region '${regionName}'`);
|
|
@@ -199,6 +341,9 @@ export function validateLayoutSection(input) {
|
|
|
199
341
|
const columnsErr = validateSectionColumns(parsed.data, '');
|
|
200
342
|
if (columnsErr)
|
|
201
343
|
return { success: false, error: columnsErr.trim() };
|
|
344
|
+
const nodeErr = validateSectionColumnNodes(parsed.data, '', true);
|
|
345
|
+
if (nodeErr)
|
|
346
|
+
return { success: false, error: nodeErr.trim() };
|
|
202
347
|
return { success: true, data: parsed.data };
|
|
203
348
|
}
|
|
204
349
|
/**
|
|
@@ -216,4 +361,18 @@ export function validateVariantContainer(input) {
|
|
|
216
361
|
return { success: false, error: err.trim() };
|
|
217
362
|
return { success: true, data: parsed.data };
|
|
218
363
|
}
|
|
364
|
+
/**
|
|
365
|
+
* The module-level counterpart of {@link validateVariantContainer}: schema, the
|
|
366
|
+
* ab_test/experimentId rule, and unique arm ids.
|
|
367
|
+
*/
|
|
368
|
+
export function validateModuleVariantContainer(input) {
|
|
369
|
+
const parsed = ModuleVariantContainerSchema.safeParse(input);
|
|
370
|
+
if (!parsed.success) {
|
|
371
|
+
return { success: false, error: parsed.error.errors.map(e => e.message).join('; ') };
|
|
372
|
+
}
|
|
373
|
+
const err = validateModuleVariantContainerNode(parsed.data, '');
|
|
374
|
+
if (err)
|
|
375
|
+
return { success: false, error: err.trim() };
|
|
376
|
+
return { success: true, data: parsed.data };
|
|
377
|
+
}
|
|
219
378
|
//# sourceMappingURL=types.js.map
|
package/dist/layout/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* variant-selection.ts
|
|
3
|
+
* ONE answer to "which arm does this visitor get", shared by the section-level
|
|
4
|
+
* `VariantContainer` and the module-level `ModuleVariantContainer`.
|
|
5
|
+
*
|
|
6
|
+
* Two containers with two copies of this precedence is how a personalized band
|
|
7
|
+
* and a personalized module inside it end up disagreeing about the same visitor.
|
|
8
|
+
* Dependency-free (no React, no ./types.js) so both the client renderer and any
|
|
9
|
+
* server-side pass can import it.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Server-resolved personalization state threaded into the renderer. Both fields
|
|
13
|
+
* are plain serializable values so they can cross the server→client boundary as
|
|
14
|
+
* props.
|
|
15
|
+
*/
|
|
16
|
+
export interface PersonalizationState {
|
|
17
|
+
/** Winning audience id for this visitor, or null when unpersonalized. */
|
|
18
|
+
resolvedAudienceId: string | null;
|
|
19
|
+
/** experimentId → chosen variant key; null = Default. */
|
|
20
|
+
experimentAssignments: Record<string, string | null>;
|
|
21
|
+
}
|
|
22
|
+
/** The container fields selection reads — everything else about it is irrelevant here. */
|
|
23
|
+
export interface VariantSelectionBinding {
|
|
24
|
+
mode: 'personalization' | 'ab_test';
|
|
25
|
+
experimentId?: string | undefined;
|
|
26
|
+
winnerId?: string | undefined;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Choose which arm renders for the current visitor. Returns null for "the
|
|
30
|
+
* Default arm".
|
|
31
|
+
*
|
|
32
|
+
* Precedence, in order:
|
|
33
|
+
* 1. a matched AUDIENCE arm always wins (coexistence with A/B — see
|
|
34
|
+
* `experiments/engine.ts`'s `resolveVariant`, which reaches the same answer
|
|
35
|
+
* from the experiment side);
|
|
36
|
+
* 2. in ab_test mode, a locked `winnerId` routes all traffic to that arm;
|
|
37
|
+
* 3. otherwise the visitor's server-resolved assignment for `experimentId`;
|
|
38
|
+
* 4. Default.
|
|
39
|
+
*/
|
|
40
|
+
export declare function selectVariantArm<T extends {
|
|
41
|
+
audienceId?: string | undefined;
|
|
42
|
+
}>(arms: readonly T[], binding: VariantSelectionBinding, state: PersonalizationState | null): T | null;
|
|
43
|
+
//# sourceMappingURL=variant-selection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variant-selection.d.ts","sourceRoot":"","sources":["../../src/layout/variant-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,yDAAyD;IACzD,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;CACrD;AAED,0FAA0F;AAC1F,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAA;IACnC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAC5E,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,oBAAoB,GAAG,IAAI,GACjC,CAAC,GAAG,IAAI,CAiBV"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* variant-selection.ts
|
|
3
|
+
* ONE answer to "which arm does this visitor get", shared by the section-level
|
|
4
|
+
* `VariantContainer` and the module-level `ModuleVariantContainer`.
|
|
5
|
+
*
|
|
6
|
+
* Two containers with two copies of this precedence is how a personalized band
|
|
7
|
+
* and a personalized module inside it end up disagreeing about the same visitor.
|
|
8
|
+
* Dependency-free (no React, no ./types.js) so both the client renderer and any
|
|
9
|
+
* server-side pass can import it.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Choose which arm renders for the current visitor. Returns null for "the
|
|
13
|
+
* Default arm".
|
|
14
|
+
*
|
|
15
|
+
* Precedence, in order:
|
|
16
|
+
* 1. a matched AUDIENCE arm always wins (coexistence with A/B — see
|
|
17
|
+
* `experiments/engine.ts`'s `resolveVariant`, which reaches the same answer
|
|
18
|
+
* from the experiment side);
|
|
19
|
+
* 2. in ab_test mode, a locked `winnerId` routes all traffic to that arm;
|
|
20
|
+
* 3. otherwise the visitor's server-resolved assignment for `experimentId`;
|
|
21
|
+
* 4. Default.
|
|
22
|
+
*/
|
|
23
|
+
export function selectVariantArm(arms, binding, state) {
|
|
24
|
+
if (state?.resolvedAudienceId) {
|
|
25
|
+
const byAudience = arms.find(a => a.audienceId === state.resolvedAudienceId);
|
|
26
|
+
if (byAudience)
|
|
27
|
+
return byAudience;
|
|
28
|
+
}
|
|
29
|
+
if (binding.mode === 'ab_test') {
|
|
30
|
+
if (binding.winnerId) {
|
|
31
|
+
return arms.find(a => a.audienceId === binding.winnerId) ?? null;
|
|
32
|
+
}
|
|
33
|
+
if (binding.experimentId && state) {
|
|
34
|
+
const key = state.experimentAssignments[binding.experimentId];
|
|
35
|
+
if (key)
|
|
36
|
+
return arms.find(a => a.audienceId === key) ?? null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=variant-selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variant-selection.js","sourceRoot":"","sources":["../../src/layout/variant-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqBH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAkB,EAClB,OAAgC,EAChC,KAAkC;IAElC,IAAI,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAC5E,IAAI,UAAU;YAAE,OAAO,UAAU,CAAA;IACnC,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAA;QAClE,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;YAC7D,IAAI,GAAG;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,IAAI,CAAA;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
|