@webiny/website-builder-sdk 0.0.0-unstable.eb196ccd2f → 0.0.0-unstable.eb81deee7e
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/BindingsApi.js +29 -36
- package/BindingsApi.js.map +1 -1
- package/BindingsProcessor.js +34 -43
- package/BindingsProcessor.js.map +1 -1
- package/BindingsProcessor.test.js +82 -77
- package/BindingsProcessor.test.js.map +1 -1
- package/BindingsResolver.d.ts +5 -2
- package/BindingsResolver.js +99 -122
- package/BindingsResolver.js.map +1 -1
- package/BindingsResolver.test.js +399 -362
- package/BindingsResolver.test.js.map +1 -1
- package/ComponentInputTraverser.js +32 -49
- package/ComponentInputTraverser.js.map +1 -1
- package/ComponentManifestToAstConverter.js +20 -21
- package/ComponentManifestToAstConverter.js.map +1 -1
- package/ComponentRegistry.d.ts +9 -0
- package/ComponentRegistry.js +38 -22
- package/ComponentRegistry.js.map +1 -1
- package/ComponentResolver.d.ts +3 -2
- package/ComponentResolver.js +39 -29
- package/ComponentResolver.js.map +1 -1
- package/ComponentResolver.test.d.ts +1 -0
- package/ComponentResolver.test.js +81 -0
- package/ComponentResolver.test.js.map +1 -0
- package/ConstraintEvaluator.d.ts +36 -0
- package/ConstraintEvaluator.js +288 -0
- package/ConstraintEvaluator.js.map +1 -0
- package/ConstraintEvaluator.test.d.ts +1 -0
- package/ConstraintEvaluator.test.js +1634 -0
- package/ConstraintEvaluator.test.js.map +1 -0
- package/ContentSdk.d.ts +17 -3
- package/ContentSdk.js +113 -90
- package/ContentSdk.js.map +1 -1
- package/DocumentStore.d.ts +1 -1
- package/DocumentStore.js +47 -59
- package/DocumentStore.js.map +1 -1
- package/DocumentStoreManager.js +17 -16
- package/DocumentStoreManager.js.map +1 -1
- package/EditingSdk.d.ts +2 -2
- package/EditingSdk.js +92 -124
- package/EditingSdk.js.map +1 -1
- package/ElementFactory.d.ts +2 -3
- package/ElementFactory.js +164 -163
- package/ElementFactory.js.map +1 -1
- package/ElementFactory.objectListDefaults.test.d.ts +1 -0
- package/ElementFactory.objectListDefaults.test.js +423 -0
- package/ElementFactory.objectListDefaults.test.js.map +1 -0
- package/ElementFactory.test.d.ts +1 -0
- package/ElementFactory.test.js +353 -0
- package/ElementFactory.test.js.map +1 -0
- package/Environment.js +18 -19
- package/Environment.js.map +1 -1
- package/FunctionConverter.js +8 -7
- package/FunctionConverter.js.map +1 -1
- package/HashObject.js +11 -12
- package/HashObject.js.map +1 -1
- package/HotkeyManager.js +41 -48
- package/HotkeyManager.js.map +1 -1
- package/IBindingsUpdater.js +0 -3
- package/IRedirects.js +0 -3
- package/InheritanceProcessor.d.ts +2 -2
- package/InheritanceProcessor.js +99 -139
- package/InheritanceProcessor.js.map +1 -1
- package/InheritanceProcessor.test.js +178 -178
- package/InheritanceProcessor.test.js.map +1 -1
- package/InheritedValueResolver.d.ts +18 -1
- package/InheritedValueResolver.js +18 -20
- package/InheritedValueResolver.js.map +1 -1
- package/InputBindingsProcessor.d.ts +23 -2
- package/InputBindingsProcessor.js +200 -289
- package/InputBindingsProcessor.js.map +1 -1
- package/InputBindingsProcessorTokens.test.d.ts +1 -0
- package/InputBindingsProcessorTokens.test.js +400 -0
- package/InputBindingsProcessorTokens.test.js.map +1 -0
- package/InputsBindingsProcessor.test.js +334 -313
- package/InputsBindingsProcessor.test.js.map +1 -1
- package/InputsUpdater.d.ts +1 -1
- package/InputsUpdater.js +23 -26
- package/InputsUpdater.js.map +1 -1
- package/LiveSdk.d.ts +2 -2
- package/LiveSdk.js +12 -13
- package/LiveSdk.js.map +1 -1
- package/Logger.d.ts +2 -1
- package/Logger.js +9 -8
- package/Logger.js.map +1 -1
- package/MouseTracker.js +77 -83
- package/MouseTracker.js.map +1 -1
- package/NullSdk.d.ts +4 -3
- package/NullSdk.js +22 -14
- package/NullSdk.js.map +1 -1
- package/PreviewDocument.d.ts +1 -0
- package/PreviewDocument.js +30 -30
- package/PreviewDocument.js.map +1 -1
- package/PreviewSdk.d.ts +4 -3
- package/PreviewSdk.js +19 -17
- package/PreviewSdk.js.map +1 -1
- package/PreviewViewport.d.ts +0 -1
- package/PreviewViewport.js +50 -82
- package/PreviewViewport.js.map +1 -1
- package/README.md +10 -2
- package/ResizeObserver.js +24 -31
- package/ResizeObserver.js.map +1 -1
- package/StylesBindingsProcessor.d.ts +12 -2
- package/StylesBindingsProcessor.js +62 -79
- package/StylesBindingsProcessor.js.map +1 -1
- package/StylesUpdater.d.ts +1 -1
- package/StylesUpdater.js +20 -25
- package/StylesUpdater.js.map +1 -1
- package/Theme.js +30 -32
- package/Theme.js.map +1 -1
- package/ViewportManager.d.ts +2 -0
- package/ViewportManager.js +89 -97
- package/ViewportManager.js.map +1 -1
- package/assertBindingShapes.d.ts +31 -0
- package/assertBindingShapes.js +64 -0
- package/assertBindingShapes.js.map +1 -0
- package/assertBindingShapes.test.d.ts +1 -0
- package/assertBindingShapes.test.js +131 -0
- package/assertBindingShapes.test.js.map +1 -0
- package/asset/deliveryUrl.d.ts +41 -0
- package/asset/deliveryUrl.js +34 -0
- package/asset/deliveryUrl.js.map +1 -0
- package/asset/deliveryUrl.test.d.ts +1 -0
- package/asset/deliveryUrl.test.js +127 -0
- package/asset/deliveryUrl.test.js.map +1 -0
- package/asset/geometry.d.ts +7 -0
- package/asset/geometry.js +10 -0
- package/asset/geometry.js.map +1 -0
- package/asset/imageSrcSet.d.ts +63 -0
- package/asset/imageSrcSet.js +98 -0
- package/asset/imageSrcSet.js.map +1 -0
- package/asset/imageSrcSet.test.d.ts +1 -0
- package/asset/imageSrcSet.test.js +103 -0
- package/asset/imageSrcSet.test.js.map +1 -0
- package/asset/index.d.ts +5 -0
- package/asset/index.js +5 -0
- package/asset/normalize.d.ts +24 -0
- package/asset/normalize.js +106 -0
- package/asset/normalize.js.map +1 -0
- package/asset/normalize.test.d.ts +1 -0
- package/asset/normalize.test.js +263 -0
- package/asset/normalize.test.js.map +1 -0
- package/asset/types.d.ts +2 -0
- package/asset/types.js +0 -0
- package/constants.d.ts +1 -0
- package/constants.js +7 -5
- package/constants.js.map +1 -1
- package/contentEntry/ContentEntryBindingsResolver.d.ts +30 -0
- package/contentEntry/ContentEntryBindingsResolver.js +45 -0
- package/contentEntry/ContentEntryBindingsResolver.js.map +1 -0
- package/contentEntry/ContentEntryCache.d.ts +46 -0
- package/contentEntry/ContentEntryCache.js +50 -0
- package/contentEntry/ContentEntryCache.js.map +1 -0
- package/contentEntry/resolveContentEntry.d.ts +74 -0
- package/contentEntry/resolveContentEntry.js +53 -0
- package/contentEntry/resolveContentEntry.js.map +1 -0
- package/contentEntry/resolveContentEntry.test.d.ts +1 -0
- package/contentEntry/resolveContentEntry.test.js +213 -0
- package/contentEntry/resolveContentEntry.test.js.map +1 -0
- package/createComponent.d.ts +5 -0
- package/createComponent.js +32 -0
- package/createComponent.js.map +1 -0
- package/createElement.js +5 -6
- package/createElement.js.map +1 -1
- package/createInput.d.ts +132 -16
- package/createInput.js +92 -111
- package/createInput.js.map +1 -1
- package/createTheme.js +2 -3
- package/createTheme.js.map +1 -1
- package/dataProviders/ApiClient.d.ts +10 -5
- package/dataProviders/ApiClient.js +40 -49
- package/dataProviders/ApiClient.js.map +1 -1
- package/dataProviders/DefaultDataProvider.d.ts +7 -3
- package/dataProviders/DefaultDataProvider.js +91 -45
- package/dataProviders/DefaultDataProvider.js.map +1 -1
- package/dataProviders/GET_EXPERIMENT_PAUSED.d.ts +1 -0
- package/dataProviders/GET_EXPERIMENT_PAUSED.js +17 -0
- package/dataProviders/GET_EXPERIMENT_PAUSED.js.map +1 -0
- package/dataProviders/GET_PAGE_BY_ID.d.ts +1 -1
- package/dataProviders/GET_PAGE_BY_ID.js +4 -1
- package/dataProviders/GET_PAGE_BY_ID.js.map +1 -1
- package/dataProviders/GET_PAGE_BY_PATH.d.ts +1 -1
- package/dataProviders/GET_PAGE_BY_PATH.js +4 -1
- package/dataProviders/GET_PAGE_BY_PATH.js.map +1 -1
- package/dataProviders/GET_PAGE_EXPERIMENT.d.ts +1 -0
- package/dataProviders/GET_PAGE_EXPERIMENT.js +32 -0
- package/dataProviders/GET_PAGE_EXPERIMENT.js.map +1 -0
- package/dataProviders/GET_VARIANT_CONTENT.d.ts +1 -0
- package/dataProviders/GET_VARIANT_CONTENT.js +24 -0
- package/dataProviders/GET_VARIANT_CONTENT.js.map +1 -0
- package/dataProviders/LIST_PUBLISHED_PAGES.d.ts +1 -1
- package/dataProviders/LIST_PUBLISHED_PAGES.js +17 -5
- package/dataProviders/LIST_PUBLISHED_PAGES.js.map +1 -1
- package/dataProviders/NullDataProvider.d.ts +16 -4
- package/dataProviders/NullDataProvider.js +30 -13
- package/dataProviders/NullDataProvider.js.map +1 -1
- package/dataProviders/RedirectsProvider.js +24 -27
- package/dataProviders/RedirectsProvider.js.map +1 -1
- package/defaultBreakpoints.js +43 -22
- package/defaultBreakpoints.js.map +1 -1
- package/documentOperations/$addElementReferenceToParent.d.ts +1 -1
- package/documentOperations/$addElementReferenceToParent.js +30 -26
- package/documentOperations/$addElementReferenceToParent.js.map +1 -1
- package/documentOperations/AddElement.js +8 -7
- package/documentOperations/AddElement.js.map +1 -1
- package/documentOperations/AddToParent.d.ts +2 -2
- package/documentOperations/AddToParent.js +14 -13
- package/documentOperations/AddToParent.js.map +1 -1
- package/documentOperations/IDocumentOperation.js +0 -3
- package/documentOperations/RemoveElement.js +10 -7
- package/documentOperations/RemoveElement.js.map +1 -1
- package/documentOperations/SetGlobalInputBinding.js +23 -22
- package/documentOperations/SetGlobalInputBinding.js.map +1 -1
- package/documentOperations/SetGlobalStyleBinding.js +23 -23
- package/documentOperations/SetGlobalStyleBinding.js.map +1 -1
- package/documentOperations/SetInputBindingOverride.js +30 -29
- package/documentOperations/SetInputBindingOverride.js.map +1 -1
- package/documentOperations/SetStyleBindingOverride.js +30 -31
- package/documentOperations/SetStyleBindingOverride.js.map +1 -1
- package/documentOperations/index.js +9 -8
- package/documentOperations/index.js.map +1 -1
- package/experiments/PostHogAnalyticsProvider.d.ts +31 -0
- package/experiments/PostHogAnalyticsProvider.js +28 -0
- package/experiments/PostHogAnalyticsProvider.js.map +1 -0
- package/experiments/analyticsProvider.d.ts +4 -0
- package/experiments/analyticsProvider.js +11 -0
- package/experiments/analyticsProvider.js.map +1 -0
- package/experiments/bucketing.d.ts +27 -0
- package/experiments/bucketing.js +91 -0
- package/experiments/bucketing.js.map +1 -0
- package/experiments/bucketing.test.d.ts +1 -0
- package/experiments/bucketing.test.js +183 -0
- package/experiments/bucketing.test.js.map +1 -0
- package/experiments/index.d.ts +5 -0
- package/experiments/index.js +5 -0
- package/experiments/render.d.ts +79 -0
- package/experiments/render.js +149 -0
- package/experiments/render.js.map +1 -0
- package/experiments/types.d.ts +108 -0
- package/experiments/types.js +4 -0
- package/experiments/types.js.map +1 -0
- package/findMatchingAstNode.js +11 -13
- package/findMatchingAstNode.js.map +1 -1
- package/generateElementId.d.ts +1 -1
- package/generateElementId.js +2 -2
- package/generateElementId.js.map +1 -1
- package/headersProvider.js +4 -3
- package/headersProvider.js.map +1 -1
- package/image/geometry.d.ts +54 -0
- package/image/geometry.js +112 -0
- package/image/geometry.js.map +1 -0
- package/image/geometry.test.d.ts +1 -0
- package/image/geometry.test.js +190 -0
- package/image/geometry.test.js.map +1 -0
- package/image/index.d.ts +3 -0
- package/image/index.js +3 -0
- package/image/presets.d.ts +6 -0
- package/image/presets.js +20 -0
- package/image/presets.js.map +1 -0
- package/image/types.d.ts +10 -0
- package/image/types.js +0 -0
- package/index.d.ts +12 -1
- package/index.js +11 -3
- package/jsonPatch.d.ts +1 -1
- package/jsonPatch.js +5 -9
- package/jsonPatch.js.map +1 -1
- package/messages.js +12 -11
- package/messages.js.map +1 -1
- package/messenger/MessageOrigin.js +12 -11
- package/messenger/MessageOrigin.js.map +1 -1
- package/messenger/Messenger.js +59 -70
- package/messenger/Messenger.js.map +1 -1
- package/messenger/index.js +0 -2
- package/package.json +19 -22
- package/registerComponentGroup.js +5 -6
- package/registerComponentGroup.js.map +1 -1
- package/tokenBinding.d.ts +26 -0
- package/tokenBinding.js +15 -0
- package/tokenBinding.js.map +1 -0
- package/tokenBinding.test.d.ts +1 -0
- package/tokenBinding.test.js +165 -0
- package/tokenBinding.test.js.map +1 -0
- package/types/ShorthandCssProperties.js +0 -3
- package/types/WebsiteBuilderTheme.d.ts +54 -45
- package/types/WebsiteBuilderTheme.js +0 -3
- package/types.d.ts +294 -13
- package/types.js +0 -3
- package/IBindingsUpdater.js.map +0 -1
- package/IRedirects.js.map +0 -1
- package/documentOperations/IDocumentOperation.js.map +0 -1
- package/index.js.map +0 -1
- package/lexical/createDefaultLexicalTheme.d.ts +0 -2
- package/lexical/createDefaultLexicalTheme.js +0 -84
- package/lexical/createDefaultLexicalTheme.js.map +0 -1
- package/lexical/createLexicalTheme.d.ts +0 -2
- package/lexical/createLexicalTheme.js +0 -7
- package/lexical/createLexicalTheme.js.map +0 -1
- package/lexical/deepMerge.d.ts +0 -1
- package/lexical/deepMerge.js +0 -23
- package/lexical/deepMerge.js.map +0 -1
- package/messenger/index.js.map +0 -1
- package/types/LexicalEditorTheme.d.ts +0 -2
- package/types/LexicalEditorTheme.js +0 -3
- package/types/LexicalEditorTheme.js.map +0 -1
- package/types/ShorthandCssProperties.js.map +0 -1
- package/types/WebsiteBuilderTheme.js.map +0 -1
- package/types.js.map +0 -1
|
@@ -1,306 +1,217 @@
|
|
|
1
|
-
import
|
|
1
|
+
import deep_equal from "deep-equal";
|
|
2
2
|
import set from "lodash/set.js";
|
|
3
3
|
import { InheritedValueResolver } from "./InheritedValueResolver.js";
|
|
4
|
+
import { isTokenBinding, tokenToCssValue } from "./tokenBinding.js";
|
|
4
5
|
import { DocumentOperations } from "./documentOperations/index.js";
|
|
5
6
|
import { InputsUpdater } from "./InputsUpdater.js";
|
|
6
7
|
import { generateElementId } from "./generateElementId.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
this.breakpoints = breakpoints;
|
|
16
|
-
this.rawBindings = rawBindings;
|
|
17
|
-
this.elementFactory = elementFactory;
|
|
18
|
-
this.elementReferences = this.getElementReferences(rawBindings.inputs);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Converts flat input bindings into deep inputs object (removes `.static` wrappers).
|
|
23
|
-
*/
|
|
24
|
-
toDeepInputs(flat) {
|
|
25
|
-
const result = {};
|
|
26
|
-
|
|
27
|
-
// Assigns a value to a nested path within the result object, creating arrays/objects as needed.
|
|
28
|
-
const assignValue = (path, value) => {
|
|
29
|
-
let current = result;
|
|
30
|
-
for (let i = 0; i < path.length - 1; i++) {
|
|
31
|
-
const key = path[i];
|
|
32
|
-
const nextKey = path[i + 1];
|
|
33
|
-
const isNextIndex = typeof nextKey === "number";
|
|
34
|
-
if (typeof key === "number") {
|
|
35
|
-
if (!Array.isArray(current)) {
|
|
36
|
-
throw new Error("Expected array in path assignment.");
|
|
37
|
-
}
|
|
38
|
-
while (current.length <= key) {
|
|
39
|
-
current.push(isNextIndex ? [] : {});
|
|
40
|
-
}
|
|
41
|
-
if (typeof current[key] !== "object") {
|
|
42
|
-
current[key] = isNextIndex ? [] : {};
|
|
43
|
-
}
|
|
44
|
-
current = current[key];
|
|
45
|
-
} else {
|
|
46
|
-
if (!(key in current) || typeof current[key] !== "object") {
|
|
47
|
-
current[key] = isNextIndex ? [] : {};
|
|
48
|
-
}
|
|
49
|
-
current = current[key];
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
current[path[path.length - 1]] = value;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
// Recursively walks the AST and assigns values from flat bindings to the nested result.
|
|
56
|
-
const walk = (nodes, prefix) => {
|
|
57
|
-
for (const node of nodes) {
|
|
58
|
-
const pathParts = [...prefix, node.name];
|
|
59
|
-
const flatKey = pathParts.join("/");
|
|
60
|
-
const entry = flat[flatKey];
|
|
61
|
-
const staticValue = entry?.static;
|
|
62
|
-
if (node.children.length > 0) {
|
|
63
|
-
if (node.list) {
|
|
64
|
-
const pattern = new RegExp(`^${flatKey}\\/(\\d+)\\/`);
|
|
65
|
-
const indexes = Object.keys(flat).reduce((acc, key) => {
|
|
66
|
-
const match = key.match(pattern);
|
|
67
|
-
if (match) {
|
|
68
|
-
acc.push(parseInt(match[1], 10));
|
|
69
|
-
}
|
|
70
|
-
return acc;
|
|
71
|
-
}, []);
|
|
72
|
-
const uniqueIndexes = Array.from(new Set(indexes)).sort((a, b) => a - b);
|
|
73
|
-
for (const i of uniqueIndexes) {
|
|
74
|
-
walk(node.children, [...prefix, `${node.name}/${i}`]);
|
|
75
|
-
}
|
|
76
|
-
} else {
|
|
77
|
-
walk(node.children, pathParts);
|
|
78
|
-
}
|
|
79
|
-
} else if (staticValue !== undefined) {
|
|
80
|
-
const path = pathParts.reduce((acc, part) => {
|
|
81
|
-
const match = part.match(/(.*?)\/(\d+)/);
|
|
82
|
-
if (match) {
|
|
83
|
-
acc.push(match[1], Number(match[2]));
|
|
84
|
-
} else {
|
|
85
|
-
acc.push(part);
|
|
86
|
-
}
|
|
87
|
-
return acc;
|
|
88
|
-
}, []);
|
|
89
|
-
assignValue(path, staticValue);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
walk(this.inputsAst, []);
|
|
94
|
-
return result;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Flattens deep inputs object into flat bindings with `.static` wrappers,
|
|
99
|
-
* skipping overrides that match inherited parent breakpoint values.
|
|
100
|
-
*/
|
|
101
|
-
createUpdate(inputs, breakpoint) {
|
|
102
|
-
const operations = [];
|
|
103
|
-
const originalInputs = this.rawBindings.inputs ?? {};
|
|
104
|
-
const rebuilt = {
|
|
105
|
-
inputs: {},
|
|
106
|
-
overrides: {}
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
// Clone existing overrides if present, to avoid losing breakpoint overrides
|
|
110
|
-
if (this.rawBindings.overrides) {
|
|
111
|
-
for (const [bp, overrides] of Object.entries(this.rawBindings.overrides)) {
|
|
112
|
-
if (overrides.inputs) {
|
|
113
|
-
set(rebuilt, `overrides.${bp}.inputs`, structuredClone(this.rawBindings.overrides[bp].inputs));
|
|
114
|
-
}
|
|
115
|
-
}
|
|
8
|
+
class InputsBindingsProcessor {
|
|
9
|
+
constructor(elementId, inputsAst, breakpoints, rawBindings, elementFactory){
|
|
10
|
+
this.elementId = elementId;
|
|
11
|
+
this.inputsAst = inputsAst;
|
|
12
|
+
this.breakpoints = breakpoints;
|
|
13
|
+
this.rawBindings = rawBindings;
|
|
14
|
+
this.elementFactory = elementFactory;
|
|
15
|
+
this.elementReferences = this.getElementReferences(rawBindings.inputs);
|
|
116
16
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
// Recursively traverses the AST nodes, comparing new input values with original bindings.
|
|
140
|
-
// Collects changed values into 'rebuilt' and generates operations for new elements.
|
|
141
|
-
const compareAndCollect = (nodes, prefix) => {
|
|
142
|
-
for (const node of nodes) {
|
|
143
|
-
const pathParts = [...prefix, node.name];
|
|
144
|
-
const flatKey = pathParts.join("/");
|
|
145
|
-
|
|
146
|
-
// Mark this path as seen
|
|
147
|
-
seenPaths.add(flatKey);
|
|
148
|
-
if (node.children.length) {
|
|
149
|
-
if (node.list) {
|
|
150
|
-
// For list nodes, process each indexed item separately
|
|
151
|
-
const list = getValue(inputs, flatKey);
|
|
152
|
-
if (Array.isArray(list)) {
|
|
153
|
-
for (let i = 0; i < list.length; i++) {
|
|
154
|
-
// Recurse with indexed path like 'rows[0]', 'rows[1]'
|
|
155
|
-
compareAndCollect(node.children, [...pathParts.slice(0, -1), `${node.name}/${i}`]);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
} else {
|
|
159
|
-
// For single object nodes, recurse normally
|
|
160
|
-
compareAndCollect(node.children, pathParts);
|
|
161
|
-
}
|
|
162
|
-
} else {
|
|
163
|
-
// Leaf node (primitive or slot) processing
|
|
164
|
-
|
|
165
|
-
// Get current new value from deep inputs
|
|
166
|
-
const newValue = getValue(inputs, flatKey);
|
|
167
|
-
|
|
168
|
-
// Get original binding entry for this path
|
|
169
|
-
const originalEntry = originalInputs[flatKey];
|
|
170
|
-
|
|
171
|
-
// Skip if newValue is undefined and no original entry
|
|
172
|
-
if (newValue === undefined && !originalEntry) {
|
|
173
|
-
continue;
|
|
174
|
-
}
|
|
175
|
-
if (typeof newValue === "object" && newValue?.action === "CreateElement") {
|
|
176
|
-
// Handle CreateElement action by generating element and operations
|
|
177
|
-
const newElement = this.elementFactory.createElementFromComponent({
|
|
178
|
-
componentName: newValue.params.component,
|
|
179
|
-
parentId: this.elementId,
|
|
180
|
-
slot: flatKey,
|
|
181
|
-
index: -1,
|
|
182
|
-
bindings: newValue.params
|
|
183
|
-
});
|
|
184
|
-
const createdId = newElement.element.id;
|
|
185
|
-
|
|
186
|
-
// Assign or generate a stable unique id for the binding
|
|
187
|
-
const existingId = originalEntry?.id;
|
|
188
|
-
const idToUse = existingId ?? generateElementId();
|
|
189
|
-
|
|
190
|
-
// Build binding for the new element id(s)
|
|
191
|
-
const binding = {
|
|
192
|
-
static: node.list ? [createdId] : createdId,
|
|
193
|
-
type: node.type,
|
|
194
|
-
list: node.list,
|
|
195
|
-
id: idToUse
|
|
196
|
-
};
|
|
197
|
-
if (node.input?.responsive && !this.isBaseBreakpoint(breakpoint)) {
|
|
198
|
-
const inheritedValue = valueResolver.getInheritedValue(flatKey, breakpoint);
|
|
199
|
-
if (binding.static === undefined) {
|
|
200
|
-
// Unset override
|
|
201
|
-
if (rebuilt.overrides[breakpoint]?.inputs?.[flatKey]) {
|
|
202
|
-
delete rebuilt.overrides[breakpoint].inputs[flatKey];
|
|
203
|
-
}
|
|
204
|
-
} else if (inheritedValue === undefined || !deepEqual(inheritedValue, binding.static)) {
|
|
205
|
-
if (!rebuilt.overrides[breakpoint]) {
|
|
206
|
-
rebuilt.overrides[breakpoint] = {
|
|
207
|
-
inputs: {}
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
rebuilt.overrides[breakpoint].inputs[flatKey] = binding;
|
|
211
|
-
} else {
|
|
212
|
-
if (rebuilt.overrides[breakpoint]?.inputs?.[flatKey]) {
|
|
213
|
-
delete rebuilt.overrides[breakpoint].inputs[flatKey];
|
|
17
|
+
toTokenMap(flat = {}) {
|
|
18
|
+
const result = {};
|
|
19
|
+
for (const [key, binding] of Object.entries(flat))if (isTokenBinding(binding)) result[key] = binding.token;
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
toDeepInputs(flat) {
|
|
23
|
+
const result = {};
|
|
24
|
+
const assignValue = (path, value)=>{
|
|
25
|
+
let current = result;
|
|
26
|
+
for(let i = 0; i < path.length - 1; i++){
|
|
27
|
+
const key = path[i];
|
|
28
|
+
const nextKey = path[i + 1];
|
|
29
|
+
const isNextIndex = "number" == typeof nextKey;
|
|
30
|
+
if ("number" == typeof key) {
|
|
31
|
+
if (!Array.isArray(current)) throw new Error("Expected array in path assignment.");
|
|
32
|
+
while(current.length <= key)current.push(isNextIndex ? [] : {});
|
|
33
|
+
if ("object" != typeof current[key]) current[key] = isNextIndex ? [] : {};
|
|
34
|
+
current = current[key];
|
|
35
|
+
} else {
|
|
36
|
+
if (!(key in current) || "object" != typeof current[key]) current[key] = isNextIndex ? [] : {};
|
|
37
|
+
current = current[key];
|
|
214
38
|
}
|
|
215
|
-
}
|
|
216
|
-
if (originalEntry) {
|
|
217
|
-
rebuilt.inputs[flatKey] = originalEntry;
|
|
218
|
-
}
|
|
219
|
-
} else {
|
|
220
|
-
// Normal case: update base inputs
|
|
221
|
-
rebuilt.inputs[flatKey] = binding;
|
|
222
39
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
40
|
+
current[path[path.length - 1]] = value;
|
|
41
|
+
};
|
|
42
|
+
const walk = (nodes, prefix)=>{
|
|
43
|
+
for (const node of nodes){
|
|
44
|
+
const pathParts = [
|
|
45
|
+
...prefix,
|
|
46
|
+
node.name
|
|
47
|
+
];
|
|
48
|
+
const flatKey = pathParts.join("/");
|
|
49
|
+
const entry = flat[flatKey];
|
|
50
|
+
const staticValue = isTokenBinding(entry) ? tokenToCssValue(entry.token) : entry?.static;
|
|
51
|
+
if (node.children.length > 0) if (node.list) {
|
|
52
|
+
const pattern = new RegExp(`^${flatKey}\\/(\\d+)\\/`);
|
|
53
|
+
const indexes = Object.keys(flat).reduce((acc, key)=>{
|
|
54
|
+
const match = key.match(pattern);
|
|
55
|
+
if (match) acc.push(parseInt(match[1], 10));
|
|
56
|
+
return acc;
|
|
57
|
+
}, []);
|
|
58
|
+
const uniqueIndexes = Array.from(new Set(indexes)).sort((a, b)=>a - b);
|
|
59
|
+
for (const i of uniqueIndexes)walk(node.children, [
|
|
60
|
+
...prefix,
|
|
61
|
+
`${node.name}/${i}`
|
|
62
|
+
]);
|
|
63
|
+
} else walk(node.children, pathParts);
|
|
64
|
+
else if (void 0 !== staticValue) {
|
|
65
|
+
const path = pathParts.reduce((acc, part)=>{
|
|
66
|
+
const match = part.match(/(.*?)\/(\d+)/);
|
|
67
|
+
if (match) acc.push(match[1], Number(match[2]));
|
|
68
|
+
else acc.push(part);
|
|
69
|
+
return acc;
|
|
70
|
+
}, []);
|
|
71
|
+
assignValue(path, staticValue);
|
|
254
72
|
}
|
|
255
|
-
rebuilt.overrides[breakpoint].inputs[flatKey] = binding;
|
|
256
|
-
} else {
|
|
257
|
-
if (rebuilt.overrides[breakpoint]?.inputs?.[flatKey]) {
|
|
258
|
-
delete rebuilt.overrides[breakpoint].inputs[flatKey];
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
if (originalEntry) {
|
|
262
|
-
rebuilt.inputs[flatKey] = originalEntry;
|
|
263
|
-
}
|
|
264
|
-
} else {
|
|
265
|
-
// Base binding update
|
|
266
|
-
rebuilt.inputs[flatKey] = binding;
|
|
267
73
|
}
|
|
268
|
-
|
|
74
|
+
};
|
|
75
|
+
walk(this.inputsAst, []);
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
createUpdate(inputs, breakpoint, tokens = {}) {
|
|
79
|
+
const operations = [];
|
|
80
|
+
const originalInputs = this.rawBindings.inputs ?? {};
|
|
81
|
+
const rebuilt = {
|
|
82
|
+
inputs: {},
|
|
83
|
+
overrides: {}
|
|
84
|
+
};
|
|
85
|
+
if (this.rawBindings.overrides) {
|
|
86
|
+
for (const [bp, overrides] of Object.entries(this.rawBindings.overrides))if (overrides.inputs) set(rebuilt, `overrides.${bp}.inputs`, structuredClone(this.rawBindings.overrides[bp].inputs));
|
|
269
87
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
88
|
+
const seenPaths = new Set();
|
|
89
|
+
const valueResolver = new InheritedValueResolver(this.breakpoints, (bp)=>{
|
|
90
|
+
if (this.isBaseBreakpoint(bp)) return this.rawBindings.inputs;
|
|
91
|
+
return this.rawBindings.overrides?.[bp]?.inputs;
|
|
92
|
+
});
|
|
93
|
+
const getValue = (obj, path)=>{
|
|
94
|
+
const segments = path.split("/");
|
|
95
|
+
const keys = segments.flatMap((segment)=>segment.split(".").map((part)=>/^\d+$/.test(part) ? parseInt(part, 10) : part));
|
|
96
|
+
return keys.reduce((acc, key)=>acc ? acc[key] : void 0, obj);
|
|
97
|
+
};
|
|
98
|
+
const compareAndCollect = (nodes, prefix)=>{
|
|
99
|
+
for (const node of nodes){
|
|
100
|
+
const pathParts = [
|
|
101
|
+
...prefix,
|
|
102
|
+
node.name
|
|
103
|
+
];
|
|
104
|
+
const flatKey = pathParts.join("/");
|
|
105
|
+
seenPaths.add(flatKey);
|
|
106
|
+
if (node.children.length) if (node.list) {
|
|
107
|
+
const list = getValue(inputs, flatKey);
|
|
108
|
+
if (Array.isArray(list)) for(let i = 0; i < list.length; i++)compareAndCollect(node.children, [
|
|
109
|
+
...pathParts.slice(0, -1),
|
|
110
|
+
`${node.name}/${i}`
|
|
111
|
+
]);
|
|
112
|
+
} else compareAndCollect(node.children, pathParts);
|
|
113
|
+
else {
|
|
114
|
+
let newValue = getValue(inputs, flatKey);
|
|
115
|
+
const originalEntry = originalInputs[flatKey];
|
|
116
|
+
if (void 0 === newValue && !originalEntry) continue;
|
|
117
|
+
if (node.list && Array.isArray(newValue)) newValue = newValue.map((item)=>{
|
|
118
|
+
if ("object" == typeof item && null !== item && "CreateElement" === item.action) {
|
|
119
|
+
const newElement = this.elementFactory.createElementFromComponent({
|
|
120
|
+
componentName: item.params.component,
|
|
121
|
+
parentId: this.elementId,
|
|
122
|
+
slot: flatKey,
|
|
123
|
+
bindings: item.params
|
|
124
|
+
});
|
|
125
|
+
operations.push(...newElement.operations.filter((op)=>!(op instanceof DocumentOperations.AddToParent)));
|
|
126
|
+
return newElement.element.id;
|
|
127
|
+
}
|
|
128
|
+
return item;
|
|
129
|
+
});
|
|
130
|
+
if (Array.isArray(newValue) || "object" != typeof newValue || newValue?.action !== "CreateElement") {
|
|
131
|
+
const isResponsive = node.input?.responsive && !this.isBaseBreakpoint(breakpoint);
|
|
132
|
+
const existingId = originalEntry?.id;
|
|
133
|
+
const idToUse = existingId ?? generateElementId();
|
|
134
|
+
const token = tokens[flatKey];
|
|
135
|
+
const binding = {
|
|
136
|
+
...originalEntry ?? {},
|
|
137
|
+
type: node.type,
|
|
138
|
+
list: node.list,
|
|
139
|
+
id: idToUse
|
|
140
|
+
};
|
|
141
|
+
if (token) {
|
|
142
|
+
binding.token = token;
|
|
143
|
+
delete binding.static;
|
|
144
|
+
} else {
|
|
145
|
+
binding.static = newValue;
|
|
146
|
+
delete binding.token;
|
|
147
|
+
}
|
|
148
|
+
if (isResponsive) {
|
|
149
|
+
const inherited = valueResolver.getInheritedBinding(flatKey, breakpoint);
|
|
150
|
+
const isRedundant = token ? inherited?.token !== void 0 && deep_equal(inherited.token, token) : inherited?.static !== void 0 && deep_equal(inherited.static, newValue);
|
|
151
|
+
const isUnset = void 0 === token && void 0 === newValue;
|
|
152
|
+
if (isUnset || isRedundant) {
|
|
153
|
+
if (rebuilt.overrides[breakpoint]?.inputs?.[flatKey]) delete rebuilt.overrides[breakpoint].inputs[flatKey];
|
|
154
|
+
} else {
|
|
155
|
+
if (!rebuilt.overrides[breakpoint]) rebuilt.overrides[breakpoint] = {
|
|
156
|
+
inputs: {}
|
|
157
|
+
};
|
|
158
|
+
rebuilt.overrides[breakpoint].inputs[flatKey] = binding;
|
|
159
|
+
}
|
|
160
|
+
if (originalEntry) rebuilt.inputs[flatKey] = originalEntry;
|
|
161
|
+
} else rebuilt.inputs[flatKey] = binding;
|
|
162
|
+
} else {
|
|
163
|
+
const newElement = this.elementFactory.createElementFromComponent({
|
|
164
|
+
componentName: newValue.params.component,
|
|
165
|
+
parentId: this.elementId,
|
|
166
|
+
slot: flatKey,
|
|
167
|
+
index: -1,
|
|
168
|
+
bindings: newValue.params
|
|
169
|
+
});
|
|
170
|
+
const createdId = newElement.element.id;
|
|
171
|
+
const existingId = originalEntry?.id;
|
|
172
|
+
const idToUse = existingId ?? generateElementId();
|
|
173
|
+
const binding = {
|
|
174
|
+
static: createdId,
|
|
175
|
+
type: node.type,
|
|
176
|
+
list: node.list,
|
|
177
|
+
id: idToUse
|
|
178
|
+
};
|
|
179
|
+
if (node.input?.responsive && !this.isBaseBreakpoint(breakpoint)) {
|
|
180
|
+
const inheritedValue = valueResolver.getInheritedValue(flatKey, breakpoint);
|
|
181
|
+
if (void 0 === binding.static) {
|
|
182
|
+
if (rebuilt.overrides[breakpoint]?.inputs?.[flatKey]) delete rebuilt.overrides[breakpoint].inputs[flatKey];
|
|
183
|
+
} else if (void 0 !== inheritedValue && deep_equal(inheritedValue, binding.static)) {
|
|
184
|
+
if (rebuilt.overrides[breakpoint]?.inputs?.[flatKey]) delete rebuilt.overrides[breakpoint].inputs[flatKey];
|
|
185
|
+
} else {
|
|
186
|
+
if (!rebuilt.overrides[breakpoint]) rebuilt.overrides[breakpoint] = {
|
|
187
|
+
inputs: {}
|
|
188
|
+
};
|
|
189
|
+
rebuilt.overrides[breakpoint].inputs[flatKey] = binding;
|
|
190
|
+
}
|
|
191
|
+
if (originalEntry) rebuilt.inputs[flatKey] = originalEntry;
|
|
192
|
+
} else rebuilt.inputs[flatKey] = binding;
|
|
193
|
+
operations.push(...newElement.operations.filter((op)=>!(op instanceof DocumentOperations.AddToParent)));
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
compareAndCollect(this.inputsAst, []);
|
|
199
|
+
const usedSlotIds = this.getElementReferences(rebuilt.inputs);
|
|
200
|
+
for (const id of this.elementReferences)if (!usedSlotIds.has(id)) operations.push(new DocumentOperations.RemoveElement(id));
|
|
201
|
+
return new InputsUpdater(this.elementId, rebuilt, operations);
|
|
283
202
|
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
const references = new Set();
|
|
290
|
-
for (const [, binding] of Object.entries(inputs)) {
|
|
291
|
-
if (binding.type === "slot") {
|
|
292
|
-
if (Array.isArray(binding.static)) {
|
|
293
|
-
(binding.static ?? []).forEach(id => references.add(id));
|
|
294
|
-
} else if (typeof binding.static === "string") {
|
|
295
|
-
references.add(binding.static);
|
|
203
|
+
getElementReferences(inputs = {}) {
|
|
204
|
+
const references = new Set();
|
|
205
|
+
for (const [, binding] of Object.entries(inputs))if ("slot" === binding.type) {
|
|
206
|
+
if (Array.isArray(binding.static)) (binding.static ?? []).forEach((id)=>references.add(id));
|
|
207
|
+
else if ("string" == typeof binding.static) references.add(binding.static);
|
|
296
208
|
}
|
|
297
|
-
|
|
209
|
+
return references;
|
|
210
|
+
}
|
|
211
|
+
isBaseBreakpoint(name) {
|
|
212
|
+
return 0 === this.breakpoints.indexOf(name);
|
|
298
213
|
}
|
|
299
|
-
return references;
|
|
300
|
-
}
|
|
301
|
-
isBaseBreakpoint(name) {
|
|
302
|
-
return this.breakpoints.indexOf(name) === 0;
|
|
303
|
-
}
|
|
304
214
|
}
|
|
215
|
+
export { InputsBindingsProcessor };
|
|
305
216
|
|
|
306
217
|
//# sourceMappingURL=InputBindingsProcessor.js.map
|