@webiny/website-builder-sdk 0.0.0-unstable.06b2ede40f
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.d.ts +25 -0
- package/BindingsApi.js +42 -0
- package/BindingsApi.js.map +1 -0
- package/BindingsProcessor.d.ts +11 -0
- package/BindingsProcessor.js +49 -0
- package/BindingsProcessor.js.map +1 -0
- package/BindingsProcessor.test.d.ts +1 -0
- package/BindingsProcessor.test.js +86 -0
- package/BindingsProcessor.test.js.map +1 -0
- package/BindingsResolver.d.ts +20 -0
- package/BindingsResolver.js +134 -0
- package/BindingsResolver.js.map +1 -0
- package/BindingsResolver.test.d.ts +1 -0
- package/BindingsResolver.test.js +382 -0
- package/BindingsResolver.test.js.map +1 -0
- package/ComponentInputTraverser.d.ts +18 -0
- package/ComponentInputTraverser.js +56 -0
- package/ComponentInputTraverser.js.map +1 -0
- package/ComponentManifestToAstConverter.d.ts +13 -0
- package/ComponentManifestToAstConverter.js +24 -0
- package/ComponentManifestToAstConverter.js.map +1 -0
- package/ComponentRegistry.d.ts +15 -0
- package/ComponentRegistry.js +25 -0
- package/ComponentRegistry.js.map +1 -0
- package/ComponentResolver.d.ts +14 -0
- package/ComponentResolver.js +36 -0
- package/ComponentResolver.js.map +1 -0
- package/ContentSdk.d.ts +44 -0
- package/ContentSdk.js +106 -0
- package/ContentSdk.js.map +1 -0
- package/DocumentStore.d.ts +15 -0
- package/DocumentStore.js +67 -0
- package/DocumentStore.js.map +1 -0
- package/DocumentStoreManager.d.ts +11 -0
- package/DocumentStoreManager.js +22 -0
- package/DocumentStoreManager.js.map +1 -0
- package/EditingSdk.d.ts +21 -0
- package/EditingSdk.js +143 -0
- package/EditingSdk.js.map +1 -0
- package/ElementFactory.d.ts +54 -0
- package/ElementFactory.js +183 -0
- package/ElementFactory.js.map +1 -0
- package/Environment.d.ts +9 -0
- package/Environment.js +23 -0
- package/Environment.js.map +1 -0
- package/FunctionConverter.d.ts +6 -0
- package/FunctionConverter.js +11 -0
- package/FunctionConverter.js.map +1 -0
- package/HashObject.d.ts +6 -0
- package/HashObject.js +17 -0
- package/HashObject.js.map +1 -0
- package/HotkeyManager.d.ts +6 -0
- package/HotkeyManager.js +58 -0
- package/HotkeyManager.js.map +1 -0
- package/IBindingsUpdater.d.ts +6 -0
- package/IBindingsUpdater.js +3 -0
- package/IBindingsUpdater.js.map +1 -0
- package/IRedirects.d.ts +5 -0
- package/IRedirects.js +3 -0
- package/IRedirects.js.map +1 -0
- package/InheritanceProcessor.d.ts +29 -0
- package/InheritanceProcessor.js +147 -0
- package/InheritanceProcessor.js.map +1 -0
- package/InheritanceProcessor.test.d.ts +1 -0
- package/InheritanceProcessor.test.js +192 -0
- package/InheritanceProcessor.test.js.map +1 -0
- package/InheritedValueResolver.d.ts +10 -0
- package/InheritedValueResolver.js +24 -0
- package/InheritedValueResolver.js.map +1 -0
- package/InputBindingsProcessor.d.ts +38 -0
- package/InputBindingsProcessor.js +306 -0
- package/InputBindingsProcessor.js.map +1 -0
- package/InputsBindingsProcessor.test.d.ts +1 -0
- package/InputsBindingsProcessor.test.js +327 -0
- package/InputsBindingsProcessor.test.js.map +1 -0
- package/InputsUpdater.d.ts +12 -0
- package/InputsUpdater.js +34 -0
- package/InputsUpdater.js.map +1 -0
- package/LICENSE +21 -0
- package/LiveSdk.d.ts +7 -0
- package/LiveSdk.js +18 -0
- package/LiveSdk.js.map +1 -0
- package/Logger.d.ts +1 -0
- package/Logger.js +10 -0
- package/Logger.js.map +1 -0
- package/MouseTracker.d.ts +39 -0
- package/MouseTracker.js +93 -0
- package/MouseTracker.js.map +1 -0
- package/NullSdk.d.ts +8 -0
- package/NullSdk.js +17 -0
- package/NullSdk.js.map +1 -0
- package/PreviewDocument.d.ts +8 -0
- package/PreviewDocument.js +35 -0
- package/PreviewDocument.js.map +1 -0
- package/PreviewSdk.d.ts +8 -0
- package/PreviewSdk.js +22 -0
- package/PreviewSdk.js.map +1 -0
- package/PreviewViewport.d.ts +9 -0
- package/PreviewViewport.js +88 -0
- package/PreviewViewport.js.map +1 -0
- package/README.md +3 -0
- package/ResizeObserver.d.ts +5 -0
- package/ResizeObserver.js +41 -0
- package/ResizeObserver.js.map +1 -0
- package/StylesBindingsProcessor.d.ts +33 -0
- package/StylesBindingsProcessor.js +91 -0
- package/StylesBindingsProcessor.js.map +1 -0
- package/StylesUpdater.d.ts +10 -0
- package/StylesUpdater.js +34 -0
- package/StylesUpdater.js.map +1 -0
- package/Theme.d.ts +4 -0
- package/Theme.js +36 -0
- package/Theme.js.map +1 -0
- package/ViewportManager.d.ts +34 -0
- package/ViewportManager.js +106 -0
- package/ViewportManager.js.map +1 -0
- package/constants.d.ts +6 -0
- package/constants.js +8 -0
- package/constants.js.map +1 -0
- package/createElement.d.ts +10 -0
- package/createElement.js +8 -0
- package/createElement.js.map +1 -0
- package/createInput.d.ts +17 -0
- package/createInput.js +128 -0
- package/createInput.js.map +1 -0
- package/createTheme.d.ts +3 -0
- package/createTheme.js +5 -0
- package/createTheme.js.map +1 -0
- package/dataProviders/ApiClient.d.ts +13 -0
- package/dataProviders/ApiClient.js +43 -0
- package/dataProviders/ApiClient.js.map +1 -0
- package/dataProviders/DefaultDataProvider.d.ts +14 -0
- package/dataProviders/DefaultDataProvider.js +47 -0
- package/dataProviders/DefaultDataProvider.js.map +1 -0
- package/dataProviders/GET_ACTIVE_REDIRECTS.d.ts +1 -0
- package/dataProviders/GET_ACTIVE_REDIRECTS.js +21 -0
- package/dataProviders/GET_ACTIVE_REDIRECTS.js.map +1 -0
- package/dataProviders/GET_PAGE_BY_ID.d.ts +1 -0
- package/dataProviders/GET_PAGE_BY_ID.js +21 -0
- package/dataProviders/GET_PAGE_BY_ID.js.map +1 -0
- package/dataProviders/GET_PAGE_BY_PATH.d.ts +1 -0
- package/dataProviders/GET_PAGE_BY_PATH.js +21 -0
- package/dataProviders/GET_PAGE_BY_PATH.js.map +1 -0
- package/dataProviders/LIST_PUBLISHED_PAGES.d.ts +1 -0
- package/dataProviders/LIST_PUBLISHED_PAGES.js +21 -0
- package/dataProviders/LIST_PUBLISHED_PAGES.js.map +1 -0
- package/dataProviders/NullDataProvider.d.ts +7 -0
- package/dataProviders/NullDataProvider.js +16 -0
- package/dataProviders/NullDataProvider.js.map +1 -0
- package/dataProviders/RedirectsProvider.d.ts +11 -0
- package/dataProviders/RedirectsProvider.js +33 -0
- package/dataProviders/RedirectsProvider.js.map +1 -0
- package/defaultBreakpoints.d.ts +2 -0
- package/defaultBreakpoints.js +25 -0
- package/defaultBreakpoints.js.map +1 -0
- package/documentOperations/$addElementReferenceToParent.d.ts +9 -0
- package/documentOperations/$addElementReferenceToParent.js +31 -0
- package/documentOperations/$addElementReferenceToParent.js.map +1 -0
- package/documentOperations/AddElement.d.ts +7 -0
- package/documentOperations/AddElement.js +10 -0
- package/documentOperations/AddElement.js.map +1 -0
- package/documentOperations/AddToParent.d.ts +8 -0
- package/documentOperations/AddToParent.js +17 -0
- package/documentOperations/AddToParent.js.map +1 -0
- package/documentOperations/IDocumentOperation.d.ts +4 -0
- package/documentOperations/IDocumentOperation.js +3 -0
- package/documentOperations/IDocumentOperation.js.map +1 -0
- package/documentOperations/RemoveElement.d.ts +7 -0
- package/documentOperations/RemoveElement.js +10 -0
- package/documentOperations/RemoveElement.js.map +1 -0
- package/documentOperations/SetGlobalInputBinding.d.ts +9 -0
- package/documentOperations/SetGlobalInputBinding.js +25 -0
- package/documentOperations/SetGlobalInputBinding.js.map +1 -0
- package/documentOperations/SetGlobalStyleBinding.d.ts +9 -0
- package/documentOperations/SetGlobalStyleBinding.js +26 -0
- package/documentOperations/SetGlobalStyleBinding.js.map +1 -0
- package/documentOperations/SetInputBindingOverride.d.ts +10 -0
- package/documentOperations/SetInputBindingOverride.js +33 -0
- package/documentOperations/SetInputBindingOverride.js.map +1 -0
- package/documentOperations/SetStyleBindingOverride.d.ts +10 -0
- package/documentOperations/SetStyleBindingOverride.js +35 -0
- package/documentOperations/SetStyleBindingOverride.js.map +1 -0
- package/documentOperations/index.d.ts +17 -0
- package/documentOperations/index.js +18 -0
- package/documentOperations/index.js.map +1 -0
- package/findMatchingAstNode.d.ts +2 -0
- package/findMatchingAstNode.js +17 -0
- package/findMatchingAstNode.js.map +1 -0
- package/generateElementId.d.ts +1 -0
- package/generateElementId.js +7 -0
- package/generateElementId.js.map +1 -0
- package/headersProvider.d.ts +4 -0
- package/headersProvider.js +7 -0
- package/headersProvider.js.map +1 -0
- package/index.d.ts +31 -0
- package/index.js +33 -0
- package/index.js.map +1 -0
- package/jsonPatch.d.ts +6 -0
- package/jsonPatch.js +12 -0
- package/jsonPatch.js.map +1 -0
- package/lexical/createDefaultLexicalTheme.d.ts +2 -0
- package/lexical/createDefaultLexicalTheme.js +84 -0
- package/lexical/createDefaultLexicalTheme.js.map +1 -0
- package/lexical/createLexicalTheme.d.ts +2 -0
- package/lexical/createLexicalTheme.js +7 -0
- package/lexical/createLexicalTheme.js.map +1 -0
- package/lexical/deepMerge.d.ts +1 -0
- package/lexical/deepMerge.js +23 -0
- package/lexical/deepMerge.js.map +1 -0
- package/messages.d.ts +11 -0
- package/messages.js +13 -0
- package/messages.js.map +1 -0
- package/messenger/MessageOrigin.d.ts +7 -0
- package/messenger/MessageOrigin.js +14 -0
- package/messenger/MessageOrigin.js.map +1 -0
- package/messenger/Messenger.d.ts +22 -0
- package/messenger/Messenger.js +80 -0
- package/messenger/Messenger.js.map +1 -0
- package/messenger/index.d.ts +2 -0
- package/messenger/index.js +4 -0
- package/messenger/index.js.map +1 -0
- package/package.json +54 -0
- package/registerComponentGroup.d.ts +2 -0
- package/registerComponentGroup.js +10 -0
- package/registerComponentGroup.js.map +1 -0
- package/types/LexicalEditorTheme.d.ts +2 -0
- package/types/LexicalEditorTheme.js +3 -0
- package/types/LexicalEditorTheme.js.map +1 -0
- package/types/ShorthandCssProperties.d.ts +1 -0
- package/types/ShorthandCssProperties.js +3 -0
- package/types/ShorthandCssProperties.js.map +1 -0
- package/types/WebsiteBuilderTheme.d.ts +92 -0
- package/types/WebsiteBuilderTheme.js +3 -0
- package/types/WebsiteBuilderTheme.js.map +1 -0
- package/types.d.ts +295 -0
- package/types.js +3 -0
- package/types.js.map +1 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { generateElementId } from "./generateElementId";
|
|
2
|
+
import { DocumentOperations } from "./documentOperations";
|
|
3
|
+
import { ComponentManifestToAstConverter } from "./ComponentManifestToAstConverter";
|
|
4
|
+
import { ComponentInputTraverser } from "./ComponentInputTraverser";
|
|
5
|
+
const defaultStyles = {
|
|
6
|
+
display: "flex",
|
|
7
|
+
flexDirection: "column"
|
|
8
|
+
};
|
|
9
|
+
const withDefaultStyles = styles => {
|
|
10
|
+
return {
|
|
11
|
+
...defaultStyles,
|
|
12
|
+
...styles
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
const defaultOperations = {
|
|
16
|
+
addElement: element => {
|
|
17
|
+
return new DocumentOperations.AddElement(element);
|
|
18
|
+
},
|
|
19
|
+
addToParent: (element, index) => {
|
|
20
|
+
return new DocumentOperations.AddToParent(element, index);
|
|
21
|
+
},
|
|
22
|
+
setInputBinding: (elementId, bindingPath, binding) => {
|
|
23
|
+
return new DocumentOperations.SetGlobalInputBinding(elementId, bindingPath, binding);
|
|
24
|
+
},
|
|
25
|
+
setStyleBinding: (elementId, bindingPath, binding) => {
|
|
26
|
+
return new DocumentOperations.SetGlobalStyleBinding(elementId, bindingPath, binding);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
export class ElementFactory {
|
|
30
|
+
constructor(components) {
|
|
31
|
+
this.components = components;
|
|
32
|
+
}
|
|
33
|
+
createElementFromComponent({
|
|
34
|
+
componentName,
|
|
35
|
+
parentId,
|
|
36
|
+
slot,
|
|
37
|
+
index,
|
|
38
|
+
bindings
|
|
39
|
+
}) {
|
|
40
|
+
const {
|
|
41
|
+
element,
|
|
42
|
+
componentManifest,
|
|
43
|
+
inputsAst
|
|
44
|
+
} = this.createElement(componentName, parentId, slot);
|
|
45
|
+
const documentOps = [defaultOperations.addElement(element), defaultOperations.addToParent(element, index)];
|
|
46
|
+
documentOps.push(...this.generateOperations({
|
|
47
|
+
element,
|
|
48
|
+
inputsAst,
|
|
49
|
+
bindings: {
|
|
50
|
+
inputs: bindings?.inputs ?? componentManifest.defaults?.inputs ?? {},
|
|
51
|
+
styles: withDefaultStyles(bindings?.styles ?? componentManifest.defaults?.styles ?? {}),
|
|
52
|
+
overrides: bindings?.overrides ?? {}
|
|
53
|
+
},
|
|
54
|
+
operations: defaultOperations
|
|
55
|
+
}));
|
|
56
|
+
return {
|
|
57
|
+
element,
|
|
58
|
+
operations: documentOps
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
generateOperations({
|
|
62
|
+
element,
|
|
63
|
+
inputsAst,
|
|
64
|
+
bindings,
|
|
65
|
+
operations
|
|
66
|
+
}) {
|
|
67
|
+
const ops = this.generateOperationsFromBindings({
|
|
68
|
+
elementId: element.id,
|
|
69
|
+
inputsAst,
|
|
70
|
+
bindings,
|
|
71
|
+
operations,
|
|
72
|
+
ignoreDefaultValues: false
|
|
73
|
+
});
|
|
74
|
+
if (bindings.overrides) {
|
|
75
|
+
for (const [breakpoint, overrides] of Object.entries(bindings.overrides)) {
|
|
76
|
+
ops.push(...this.generateOperationsFromBindings({
|
|
77
|
+
elementId: element.id,
|
|
78
|
+
inputsAst,
|
|
79
|
+
bindings: {
|
|
80
|
+
inputs: overrides.inputs ?? {},
|
|
81
|
+
styles: overrides.styles ?? {}
|
|
82
|
+
},
|
|
83
|
+
operations: {
|
|
84
|
+
...operations,
|
|
85
|
+
setInputBinding: (elementId, bindingPath, binding) => {
|
|
86
|
+
return new DocumentOperations.SetInputBindingOverride(elementId, bindingPath, binding, breakpoint);
|
|
87
|
+
},
|
|
88
|
+
setStyleBinding: (elementId, bindingPath, binding) => {
|
|
89
|
+
return new DocumentOperations.SetStyleBindingOverride(elementId, bindingPath, binding, breakpoint);
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
ignoreDefaultValues: true
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return ops;
|
|
97
|
+
}
|
|
98
|
+
generateOperationsFromBindings({
|
|
99
|
+
elementId,
|
|
100
|
+
inputsAst,
|
|
101
|
+
bindings,
|
|
102
|
+
operations,
|
|
103
|
+
ignoreDefaultValues
|
|
104
|
+
}) {
|
|
105
|
+
const inputData = bindings.inputs;
|
|
106
|
+
const traverser = new ComponentInputTraverser(inputsAst);
|
|
107
|
+
const ops = [];
|
|
108
|
+
traverser.traverse(inputData, (node, path, value) => {
|
|
109
|
+
const isCreateElement = value?.action === "CreateElement";
|
|
110
|
+
const isList = node.list;
|
|
111
|
+
const isObject = node.type === "object";
|
|
112
|
+
if (isCreateElement) {
|
|
113
|
+
const factory = new ElementFactory(this.components);
|
|
114
|
+
const newElement = factory.createElementFromComponent({
|
|
115
|
+
componentName: value.params.component,
|
|
116
|
+
index: isList ? this.extractIndex(path) : 0,
|
|
117
|
+
slot: path,
|
|
118
|
+
parentId: elementId,
|
|
119
|
+
bindings: value.params
|
|
120
|
+
});
|
|
121
|
+
const newElementId = newElement.element.id;
|
|
122
|
+
ops.push(...newElement.operations, operations.setInputBinding(elementId, path, {
|
|
123
|
+
id: generateElementId(),
|
|
124
|
+
static: node.list ? [newElementId] : newElementId,
|
|
125
|
+
type: node.type,
|
|
126
|
+
translatable: node.input.translatable,
|
|
127
|
+
list: node.list
|
|
128
|
+
}));
|
|
129
|
+
} else if (isObject && isList) {
|
|
130
|
+
return;
|
|
131
|
+
} else {
|
|
132
|
+
ops.push(operations.setInputBinding(elementId, path, {
|
|
133
|
+
id: generateElementId(),
|
|
134
|
+
static: ignoreDefaultValues ? undefined : value ?? node.input.defaultValue,
|
|
135
|
+
type: node.type,
|
|
136
|
+
list: node.list,
|
|
137
|
+
translatable: node.input.translatable
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// Process styles
|
|
143
|
+
for (const key in bindings.styles) {
|
|
144
|
+
ops.push(operations.setStyleBinding(elementId, key, {
|
|
145
|
+
static: bindings.styles[key]
|
|
146
|
+
}));
|
|
147
|
+
}
|
|
148
|
+
return ops;
|
|
149
|
+
}
|
|
150
|
+
getComponentManifest(componentName) {
|
|
151
|
+
const manifest = this.components[componentName];
|
|
152
|
+
if (!manifest) {
|
|
153
|
+
throw new Error(`Component "${componentName}" not registered.`);
|
|
154
|
+
}
|
|
155
|
+
return manifest;
|
|
156
|
+
}
|
|
157
|
+
extractIndex(path) {
|
|
158
|
+
const match = path.match(/\/(\d+)\//);
|
|
159
|
+
return match ? parseInt(match[1], 10) : 0;
|
|
160
|
+
}
|
|
161
|
+
createElement(componentName, parentId, slot) {
|
|
162
|
+
const element = {
|
|
163
|
+
type: "Webiny/Element",
|
|
164
|
+
id: generateElementId(),
|
|
165
|
+
parent: {
|
|
166
|
+
id: parentId,
|
|
167
|
+
slot
|
|
168
|
+
},
|
|
169
|
+
component: {
|
|
170
|
+
name: componentName
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
const componentManifest = this.getComponentManifest(componentName);
|
|
174
|
+
const inputsAst = ComponentManifestToAstConverter.convert(componentManifest.inputs ?? []);
|
|
175
|
+
return {
|
|
176
|
+
element,
|
|
177
|
+
inputsAst,
|
|
178
|
+
componentManifest
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
//# sourceMappingURL=ElementFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["generateElementId","DocumentOperations","ComponentManifestToAstConverter","ComponentInputTraverser","defaultStyles","display","flexDirection","withDefaultStyles","styles","defaultOperations","addElement","element","AddElement","addToParent","index","AddToParent","setInputBinding","elementId","bindingPath","binding","SetGlobalInputBinding","setStyleBinding","SetGlobalStyleBinding","ElementFactory","constructor","components","createElementFromComponent","componentName","parentId","slot","bindings","componentManifest","inputsAst","createElement","documentOps","push","generateOperations","inputs","defaults","overrides","operations","ops","generateOperationsFromBindings","id","ignoreDefaultValues","breakpoint","Object","entries","SetInputBindingOverride","SetStyleBindingOverride","inputData","traverser","traverse","node","path","value","isCreateElement","action","isList","list","isObject","type","factory","newElement","params","component","extractIndex","newElementId","static","translatable","input","undefined","defaultValue","key","getComponentManifest","manifest","Error","match","parseInt","parent","name","convert"],"sources":["ElementFactory.ts"],"sourcesContent":["import { generateElementId } from \"./generateElementId\";\nimport type {\n DocumentElement,\n ComponentManifest,\n InputValueBinding,\n StyleValueBinding,\n CssProperties\n} from \"~/types\";\nimport { type IDocumentOperation, DocumentOperations } from \"./documentOperations\";\nimport {\n ComponentManifestToAstConverter,\n type InputAstNode\n} from \"./ComponentManifestToAstConverter\";\nimport { ComponentInputTraverser } from \"./ComponentInputTraverser\";\n\nconst defaultStyles = {\n display: \"flex\",\n flexDirection: \"column\"\n};\n\nconst withDefaultStyles = (styles: CssProperties) => {\n return { ...defaultStyles, ...styles };\n};\n\nexport interface ElementFactoryCreateElementParams {\n componentName: string;\n parentId: string;\n slot: string;\n index: number;\n bindings?: {\n inputs?: Record<string, any>;\n styles?: Record<string, any>;\n overrides?: {\n [breakpoint: string]: {\n inputs?: Record<string, any>;\n styles?: Record<string, any>;\n };\n };\n };\n}\n\ninterface GenerateOperationsParams {\n element: DocumentElement;\n inputsAst: InputAstNode[];\n operations: ElementFactoryOperations;\n bindings: {\n inputs: Record<string, any>;\n styles: Record<string, any>;\n overrides: {\n [breakpoint: string]: {\n inputs?: Record<string, any>;\n styles?: Record<string, any>;\n };\n };\n };\n}\n\ninterface GenerateOperationsFromBindingsParams {\n elementId: string;\n inputsAst: InputAstNode[];\n bindings: {\n inputs: Record<string, any>;\n styles: Record<string, any>;\n };\n operations: ElementFactoryOperations;\n ignoreDefaultValues: boolean;\n}\n\ntype ElementFactoryOperations = {\n addElement: (element: DocumentElement) => IDocumentOperation;\n addToParent: (element: DocumentElement, index: number) => IDocumentOperation;\n setInputBinding: (\n elementId: string,\n bindingPath: string,\n binding: InputValueBinding\n ) => IDocumentOperation;\n setStyleBinding: (\n elementId: string,\n bindingPath: string,\n binding: StyleValueBinding\n ) => IDocumentOperation;\n};\n\nconst defaultOperations: ElementFactoryOperations = {\n addElement: (element: DocumentElement) => {\n return new DocumentOperations.AddElement(element);\n },\n addToParent: (element: DocumentElement, index: number) => {\n return new DocumentOperations.AddToParent(element, index);\n },\n setInputBinding: (elementId, bindingPath, binding) => {\n return new DocumentOperations.SetGlobalInputBinding(elementId, bindingPath, binding);\n },\n setStyleBinding: (elementId, bindingPath, binding) => {\n return new DocumentOperations.SetGlobalStyleBinding(elementId, bindingPath, binding);\n }\n};\n\nexport class ElementFactory {\n constructor(private components: Record<string, ComponentManifest>) {}\n\n public createElementFromComponent({\n componentName,\n parentId,\n slot,\n index,\n bindings\n }: ElementFactoryCreateElementParams) {\n const { element, componentManifest, inputsAst } = this.createElement(\n componentName,\n parentId,\n slot\n );\n\n const documentOps: IDocumentOperation[] = [\n defaultOperations.addElement(element),\n defaultOperations.addToParent(element, index)\n ];\n\n documentOps.push(\n ...this.generateOperations({\n element,\n inputsAst,\n bindings: {\n inputs: bindings?.inputs ?? componentManifest.defaults?.inputs ?? {},\n styles: withDefaultStyles(\n bindings?.styles ?? componentManifest.defaults?.styles ?? {}\n ),\n overrides: bindings?.overrides ?? {}\n },\n operations: defaultOperations\n })\n );\n\n return { element, operations: documentOps };\n }\n\n public generateOperations({\n element,\n inputsAst,\n bindings,\n operations\n }: GenerateOperationsParams): IDocumentOperation[] {\n const ops = this.generateOperationsFromBindings({\n elementId: element.id,\n inputsAst,\n bindings,\n operations,\n ignoreDefaultValues: false\n });\n\n if (bindings.overrides) {\n for (const [breakpoint, overrides] of Object.entries(bindings.overrides)) {\n ops.push(\n ...this.generateOperationsFromBindings({\n elementId: element.id,\n inputsAst,\n bindings: {\n inputs: overrides.inputs ?? {},\n styles: overrides.styles ?? {}\n },\n operations: {\n ...operations,\n setInputBinding: (elementId, bindingPath, binding) => {\n return new DocumentOperations.SetInputBindingOverride(\n elementId,\n bindingPath,\n binding,\n breakpoint\n );\n },\n setStyleBinding: (elementId, bindingPath, binding) => {\n return new DocumentOperations.SetStyleBindingOverride(\n elementId,\n bindingPath,\n binding,\n breakpoint\n );\n }\n },\n ignoreDefaultValues: true\n })\n );\n }\n }\n\n return ops;\n }\n\n private generateOperationsFromBindings({\n elementId,\n inputsAst,\n bindings,\n operations,\n ignoreDefaultValues\n }: GenerateOperationsFromBindingsParams): IDocumentOperation[] {\n const inputData = bindings.inputs;\n const traverser = new ComponentInputTraverser(inputsAst);\n\n const ops: IDocumentOperation[] = [];\n\n traverser.traverse(inputData, (node, path, value) => {\n const isCreateElement = value?.action === \"CreateElement\";\n const isList = node.list;\n const isObject = node.type === \"object\";\n\n if (isCreateElement) {\n const factory = new ElementFactory(this.components);\n const newElement = factory.createElementFromComponent({\n componentName: value.params.component,\n index: isList ? this.extractIndex(path) : 0,\n slot: path,\n parentId: elementId,\n bindings: value.params\n });\n\n const newElementId = newElement.element.id;\n\n ops.push(\n ...newElement.operations,\n operations.setInputBinding(elementId, path, {\n id: generateElementId(),\n static: node.list ? [newElementId] : newElementId,\n type: node.type,\n translatable: node.input.translatable,\n list: node.list\n })\n );\n } else if (isObject && isList) {\n return;\n } else {\n ops.push(\n operations.setInputBinding(elementId, path, {\n id: generateElementId(),\n static: ignoreDefaultValues ? undefined : value ?? node.input.defaultValue,\n type: node.type,\n list: node.list,\n translatable: node.input.translatable\n })\n );\n }\n });\n\n // Process styles\n for (const key in bindings.styles) {\n ops.push(\n operations.setStyleBinding(elementId, key, {\n static: bindings.styles[key]\n })\n );\n }\n\n return ops;\n }\n\n private getComponentManifest(componentName: string): ComponentManifest {\n const manifest = this.components[componentName];\n if (!manifest) {\n throw new Error(`Component \"${componentName}\" not registered.`);\n }\n\n return manifest;\n }\n\n private extractIndex(path: string): number {\n const match = path.match(/\\/(\\d+)\\//);\n return match ? parseInt(match[1], 10) : 0;\n }\n\n private createElement(componentName: string, parentId: string, slot: string) {\n const element: DocumentElement = {\n type: \"Webiny/Element\",\n id: generateElementId(),\n parent: { id: parentId, slot },\n component: { name: componentName }\n };\n\n const componentManifest = this.getComponentManifest(componentName);\n const inputsAst = ComponentManifestToAstConverter.convert(componentManifest.inputs ?? []);\n\n return {\n element,\n inputsAst,\n componentManifest\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/Environment.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IEnvironment } from "./types.js";
|
|
2
|
+
export declare class Environment implements IEnvironment {
|
|
3
|
+
isPreview(): boolean;
|
|
4
|
+
isClient(): boolean;
|
|
5
|
+
isServer(): boolean;
|
|
6
|
+
isEditing(): boolean;
|
|
7
|
+
private getQueryParam;
|
|
8
|
+
}
|
|
9
|
+
export declare const environment: Environment;
|
package/Environment.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export class Environment {
|
|
2
|
+
isPreview() {
|
|
3
|
+
return this.getQueryParam("preview.document") !== null;
|
|
4
|
+
}
|
|
5
|
+
isClient() {
|
|
6
|
+
return typeof window !== "undefined";
|
|
7
|
+
}
|
|
8
|
+
isServer() {
|
|
9
|
+
return !this.isClient();
|
|
10
|
+
}
|
|
11
|
+
isEditing() {
|
|
12
|
+
return this.isClient() && window.parent !== window;
|
|
13
|
+
}
|
|
14
|
+
getQueryParam(key) {
|
|
15
|
+
if (!this.isClient()) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return new URLSearchParams(window.location.search).get(key);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export const environment = new Environment();
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=Environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Environment","isPreview","getQueryParam","isClient","window","isServer","isEditing","parent","key","URLSearchParams","location","search","get","environment"],"sources":["Environment.ts"],"sourcesContent":["import type { IEnvironment } from \"./types.js\";\n\nexport class Environment implements IEnvironment {\n public isPreview(): boolean {\n return this.getQueryParam(\"preview.document\") !== null;\n }\n\n public isClient(): boolean {\n return typeof window !== \"undefined\";\n }\n\n public isServer(): boolean {\n return !this.isClient();\n }\n\n public isEditing(): boolean {\n return this.isClient() && window.parent !== window;\n }\n\n private getQueryParam(key: string): string | null {\n if (!this.isClient()) {\n return null;\n }\n\n return new URLSearchParams(window.location.search).get(key);\n }\n}\n\nexport const environment = new Environment();\n"],"mappings":"AAEA,OAAO,MAAMA,WAAW,CAAyB;EACtCC,SAASA,CAAA,EAAY;IACxB,OAAO,IAAI,CAACC,aAAa,CAAC,kBAAkB,CAAC,KAAK,IAAI;EAC1D;EAEOC,QAAQA,CAAA,EAAY;IACvB,OAAO,OAAOC,MAAM,KAAK,WAAW;EACxC;EAEOC,QAAQA,CAAA,EAAY;IACvB,OAAO,CAAC,IAAI,CAACF,QAAQ,CAAC,CAAC;EAC3B;EAEOG,SAASA,CAAA,EAAY;IACxB,OAAO,IAAI,CAACH,QAAQ,CAAC,CAAC,IAAIC,MAAM,CAACG,MAAM,KAAKH,MAAM;EACtD;EAEQF,aAAaA,CAACM,GAAW,EAAiB;IAC9C,IAAI,CAAC,IAAI,CAACL,QAAQ,CAAC,CAAC,EAAE;MAClB,OAAO,IAAI;IACf;IAEA,OAAO,IAAIM,eAAe,CAACL,MAAM,CAACM,QAAQ,CAACC,MAAM,CAAC,CAACC,GAAG,CAACJ,GAAG,CAAC;EAC/D;AACJ;AAEA,OAAO,MAAMK,WAAW,GAAG,IAAIb,WAAW,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FunctionConverter","serialize","fn","toString","deserialize","Function","functionConverter"],"sources":["FunctionConverter.ts"],"sourcesContent":["class FunctionConverter {\n serialize(fn: (...args: any[]) => unknown) {\n return fn.toString();\n }\n\n deserialize(fn: string) {\n return new Function(`return ${fn}`)();\n }\n}\n\nexport const functionConverter = new FunctionConverter();\n"],"mappings":"AAAA,MAAMA,iBAAiB,CAAC;EACpBC,SAASA,CAACC,EAA+B,EAAE;IACvC,OAAOA,EAAE,CAACC,QAAQ,CAAC,CAAC;EACxB;EAEAC,WAAWA,CAACF,EAAU,EAAE;IACpB,OAAO,IAAIG,QAAQ,CAAC,UAAUH,EAAE,EAAE,CAAC,CAAC,CAAC;EACzC;AACJ;AAEA,OAAO,MAAMI,iBAAiB,GAAG,IAAIN,iBAAiB,CAAC,CAAC","ignoreList":[]}
|
package/HashObject.d.ts
ADDED
package/HashObject.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import stringify from "fast-json-stable-stringify";
|
|
2
|
+
class HashObject {
|
|
3
|
+
hash(object) {
|
|
4
|
+
return this.fastHash(object);
|
|
5
|
+
}
|
|
6
|
+
fastHash(obj) {
|
|
7
|
+
const str = stringify(obj); // stable key order
|
|
8
|
+
let hash = 0;
|
|
9
|
+
for (let i = 0; i < str.length; i++) {
|
|
10
|
+
hash = (hash << 5) - hash + str.charCodeAt(i) | 0;
|
|
11
|
+
}
|
|
12
|
+
return hash >>> 0; // unsigned
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export const hashObject = new HashObject();
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=HashObject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["stringify","HashObject","hash","object","fastHash","obj","str","i","length","charCodeAt","hashObject"],"sources":["HashObject.ts"],"sourcesContent":["import stringify from \"fast-json-stable-stringify\";\n\nclass HashObject {\n hash(object: object) {\n return this.fastHash(object);\n }\n\n private fastHash(obj: object): number {\n const str = stringify(obj); // stable key order\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) - hash + str.charCodeAt(i)) | 0;\n }\n return hash >>> 0; // unsigned\n }\n}\n\nexport const hashObject = new HashObject();\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,4BAA4B;AAElD,MAAMC,UAAU,CAAC;EACbC,IAAIA,CAACC,MAAc,EAAE;IACjB,OAAO,IAAI,CAACC,QAAQ,CAACD,MAAM,CAAC;EAChC;EAEQC,QAAQA,CAACC,GAAW,EAAU;IAClC,MAAMC,GAAG,GAAGN,SAAS,CAACK,GAAG,CAAC,CAAC,CAAC;IAC5B,IAAIH,IAAI,GAAG,CAAC;IACZ,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,GAAG,CAACE,MAAM,EAAED,CAAC,EAAE,EAAE;MACjCL,IAAI,GAAI,CAACA,IAAI,IAAI,CAAC,IAAIA,IAAI,GAAGI,GAAG,CAACG,UAAU,CAACF,CAAC,CAAC,GAAI,CAAC;IACvD;IACA,OAAOL,IAAI,KAAK,CAAC,CAAC,CAAC;EACvB;AACJ;AAEA,OAAO,MAAMQ,UAAU,GAAG,IAAIT,UAAU,CAAC,CAAC","ignoreList":[]}
|
package/HotkeyManager.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import isHotkey from "is-hotkey";
|
|
2
|
+
const keyStack = {};
|
|
3
|
+
let listenerInitialized = false;
|
|
4
|
+
const filterTags = ["TEXTAREA", "INPUT"];
|
|
5
|
+
const isContentEditable = value => {
|
|
6
|
+
return ["true", true].includes(value);
|
|
7
|
+
};
|
|
8
|
+
let idCounter = 0;
|
|
9
|
+
const generateSimpleId = () => `hotkey-${++idCounter}`;
|
|
10
|
+
const setupListener = () => {
|
|
11
|
+
if (listenerInitialized || !document.body) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const eventListener = ev => {
|
|
15
|
+
const target = ev.target;
|
|
16
|
+
if (!target) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (filterTags.includes(target.nodeName) || isContentEditable(target.contentEditable)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const matchedKey = Object.keys(keyStack).find(key => isHotkey(key, ev));
|
|
23
|
+
if (matchedKey && keyStack[matchedKey]?.length > 0) {
|
|
24
|
+
const item = keyStack[matchedKey][0];
|
|
25
|
+
item.handler(ev);
|
|
26
|
+
ev.stopPropagation();
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
document.body.addEventListener("keydown", eventListener);
|
|
30
|
+
listenerInitialized = true;
|
|
31
|
+
};
|
|
32
|
+
export class HotkeyManager {
|
|
33
|
+
constructor() {
|
|
34
|
+
this.id = generateSimpleId();
|
|
35
|
+
setupListener();
|
|
36
|
+
}
|
|
37
|
+
add(key, handler) {
|
|
38
|
+
keyStack[key] = keyStack[key] || [];
|
|
39
|
+
const exists = keyStack[key].some(item => item.id === this.id);
|
|
40
|
+
if (!exists) {
|
|
41
|
+
keyStack[key].unshift({
|
|
42
|
+
id: this.id,
|
|
43
|
+
handler
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
remove(key) {
|
|
48
|
+
if (!keyStack[key]) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const index = keyStack[key].findIndex(item => item.id === this.id);
|
|
52
|
+
if (index >= 0) {
|
|
53
|
+
keyStack[key].splice(index, 1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=HotkeyManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isHotkey","keyStack","listenerInitialized","filterTags","isContentEditable","value","includes","idCounter","generateSimpleId","setupListener","document","body","eventListener","ev","target","nodeName","contentEditable","matchedKey","Object","keys","find","key","length","item","handler","stopPropagation","addEventListener","HotkeyManager","constructor","id","add","exists","some","unshift","remove","index","findIndex","splice"],"sources":["HotkeyManager.ts"],"sourcesContent":["import isHotkey from \"is-hotkey\";\n\ninterface KeyHandler {\n id: string;\n handler: (e: KeyboardEvent) => void;\n}\n\nconst keyStack: Record<string, KeyHandler[]> = {};\nlet listenerInitialized = false;\nconst filterTags = [\"TEXTAREA\", \"INPUT\"];\n\nconst isContentEditable = (value: any) => {\n return [\"true\", true].includes(value);\n};\n\nlet idCounter = 0;\nconst generateSimpleId = () => `hotkey-${++idCounter}`;\n\nconst setupListener = (): void => {\n if (listenerInitialized || !document.body) {\n return;\n }\n\n const eventListener = (ev: KeyboardEvent) => {\n const target = ev.target as HTMLElement;\n\n if (!target) {\n return;\n }\n if (filterTags.includes(target.nodeName) || isContentEditable(target.contentEditable)) {\n return;\n }\n\n const matchedKey = Object.keys(keyStack).find(key => isHotkey(key, ev));\n if (matchedKey && keyStack[matchedKey]?.length > 0) {\n const item = keyStack[matchedKey][0];\n item.handler(ev);\n ev.stopPropagation();\n }\n };\n\n document.body.addEventListener(\"keydown\", eventListener);\n listenerInitialized = true;\n};\n\nexport class HotkeyManager {\n private readonly id: string;\n\n constructor() {\n this.id = generateSimpleId();\n setupListener();\n }\n\n add(key: string, handler: (e: KeyboardEvent) => void): void {\n keyStack[key] = keyStack[key] || [];\n const exists = keyStack[key].some(item => item.id === this.id);\n if (!exists) {\n keyStack[key].unshift({ id: this.id, handler });\n }\n }\n\n remove(key: string): void {\n if (!keyStack[key]) {\n return;\n }\n\n const index = keyStack[key].findIndex(item => item.id === this.id);\n if (index >= 0) {\n keyStack[key].splice(index, 1);\n }\n }\n}\n"],"mappings":"AAAA,OAAOA,QAAQ,MAAM,WAAW;AAOhC,MAAMC,QAAsC,GAAG,CAAC,CAAC;AACjD,IAAIC,mBAAmB,GAAG,KAAK;AAC/B,MAAMC,UAAU,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC;AAExC,MAAMC,iBAAiB,GAAIC,KAAU,IAAK;EACtC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAACC,QAAQ,CAACD,KAAK,CAAC;AACzC,CAAC;AAED,IAAIE,SAAS,GAAG,CAAC;AACjB,MAAMC,gBAAgB,GAAGA,CAAA,KAAM,UAAU,EAAED,SAAS,EAAE;AAEtD,MAAME,aAAa,GAAGA,CAAA,KAAY;EAC9B,IAAIP,mBAAmB,IAAI,CAACQ,QAAQ,CAACC,IAAI,EAAE;IACvC;EACJ;EAEA,MAAMC,aAAa,GAAIC,EAAiB,IAAK;IACzC,MAAMC,MAAM,GAAGD,EAAE,CAACC,MAAqB;IAEvC,IAAI,CAACA,MAAM,EAAE;MACT;IACJ;IACA,IAAIX,UAAU,CAACG,QAAQ,CAACQ,MAAM,CAACC,QAAQ,CAAC,IAAIX,iBAAiB,CAACU,MAAM,CAACE,eAAe,CAAC,EAAE;MACnF;IACJ;IAEA,MAAMC,UAAU,GAAGC,MAAM,CAACC,IAAI,CAAClB,QAAQ,CAAC,CAACmB,IAAI,CAACC,GAAG,IAAIrB,QAAQ,CAACqB,GAAG,EAAER,EAAE,CAAC,CAAC;IACvE,IAAII,UAAU,IAAIhB,QAAQ,CAACgB,UAAU,CAAC,EAAEK,MAAM,GAAG,CAAC,EAAE;MAChD,MAAMC,IAAI,GAAGtB,QAAQ,CAACgB,UAAU,CAAC,CAAC,CAAC,CAAC;MACpCM,IAAI,CAACC,OAAO,CAACX,EAAE,CAAC;MAChBA,EAAE,CAACY,eAAe,CAAC,CAAC;IACxB;EACJ,CAAC;EAEDf,QAAQ,CAACC,IAAI,CAACe,gBAAgB,CAAC,SAAS,EAAEd,aAAa,CAAC;EACxDV,mBAAmB,GAAG,IAAI;AAC9B,CAAC;AAED,OAAO,MAAMyB,aAAa,CAAC;EAGvBC,WAAWA,CAAA,EAAG;IACV,IAAI,CAACC,EAAE,GAAGrB,gBAAgB,CAAC,CAAC;IAC5BC,aAAa,CAAC,CAAC;EACnB;EAEAqB,GAAGA,CAACT,GAAW,EAAEG,OAAmC,EAAQ;IACxDvB,QAAQ,CAACoB,GAAG,CAAC,GAAGpB,QAAQ,CAACoB,GAAG,CAAC,IAAI,EAAE;IACnC,MAAMU,MAAM,GAAG9B,QAAQ,CAACoB,GAAG,CAAC,CAACW,IAAI,CAACT,IAAI,IAAIA,IAAI,CAACM,EAAE,KAAK,IAAI,CAACA,EAAE,CAAC;IAC9D,IAAI,CAACE,MAAM,EAAE;MACT9B,QAAQ,CAACoB,GAAG,CAAC,CAACY,OAAO,CAAC;QAAEJ,EAAE,EAAE,IAAI,CAACA,EAAE;QAAEL;MAAQ,CAAC,CAAC;IACnD;EACJ;EAEAU,MAAMA,CAACb,GAAW,EAAQ;IACtB,IAAI,CAACpB,QAAQ,CAACoB,GAAG,CAAC,EAAE;MAChB;IACJ;IAEA,MAAMc,KAAK,GAAGlC,QAAQ,CAACoB,GAAG,CAAC,CAACe,SAAS,CAACb,IAAI,IAAIA,IAAI,CAACM,EAAE,KAAK,IAAI,CAACA,EAAE,CAAC;IAClE,IAAIM,KAAK,IAAI,CAAC,EAAE;MACZlC,QAAQ,CAACoB,GAAG,CAAC,CAACgB,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;IAClC;EACJ;AACJ","ignoreList":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { JsonPatchOperation } from "./jsonPatch";
|
|
2
|
+
import type { Document, DocumentElementBindings } from "./types";
|
|
3
|
+
export interface IBindingsUpdater {
|
|
4
|
+
applyToDocument(document: Document): void;
|
|
5
|
+
createJsonPatch(bindings: DocumentElementBindings): JsonPatchOperation[];
|
|
6
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["IBindingsUpdater.ts"],"sourcesContent":["import type { JsonPatchOperation } from \"~/jsonPatch\";\nimport type { Document, DocumentElementBindings } from \"~/types\";\n\nexport interface IBindingsUpdater {\n applyToDocument(document: Document): void;\n createJsonPatch(bindings: DocumentElementBindings): JsonPatchOperation[];\n}\n"],"mappings":"","ignoreList":[]}
|
package/IRedirects.d.ts
ADDED
package/IRedirects.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["IRedirects.ts"],"sourcesContent":["import type { PublicRedirect } from \"~/types\";\n\nexport interface IRedirects {\n getAllRedirects(): Promise<Map<string, PublicRedirect>>;\n getRedirectByPath(path: string): Promise<PublicRedirect | undefined>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { DocumentElementBindings } from "./types";
|
|
2
|
+
import type { InputAstNode } from "./ComponentManifestToAstConverter";
|
|
3
|
+
export type InheritanceInfo = {
|
|
4
|
+
inputs: Record<string, {
|
|
5
|
+
overridden: boolean;
|
|
6
|
+
inheritedFrom?: string;
|
|
7
|
+
}>;
|
|
8
|
+
styles: Record<string, {
|
|
9
|
+
overridden: boolean;
|
|
10
|
+
inheritedFrom?: string;
|
|
11
|
+
}>;
|
|
12
|
+
};
|
|
13
|
+
export declare class InheritanceProcessor {
|
|
14
|
+
private breakpoints;
|
|
15
|
+
private responsiveInputPaths;
|
|
16
|
+
constructor(breakpoints: string[], inputsAst: InputAstNode[]);
|
|
17
|
+
getInheritanceMap(bindings: DocumentElementBindings, breakpoint: string): {
|
|
18
|
+
inputs: Record<string, {
|
|
19
|
+
overridden: boolean;
|
|
20
|
+
inheritedFrom?: string | undefined;
|
|
21
|
+
}>;
|
|
22
|
+
styles: Record<string, {
|
|
23
|
+
overridden: boolean;
|
|
24
|
+
inheritedFrom?: string | undefined;
|
|
25
|
+
}>;
|
|
26
|
+
};
|
|
27
|
+
private normalizeBindingKey;
|
|
28
|
+
private getResponsiveInputPaths;
|
|
29
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
export class InheritanceProcessor {
|
|
2
|
+
constructor(breakpoints, inputsAst) {
|
|
3
|
+
this.breakpoints = breakpoints;
|
|
4
|
+
this.responsiveInputPaths = this.getResponsiveInputPaths(inputsAst);
|
|
5
|
+
}
|
|
6
|
+
getInheritanceMap(bindings, breakpoint) {
|
|
7
|
+
const overrides = bindings.overrides ?? {};
|
|
8
|
+
const inputs = bindings.inputs ?? {};
|
|
9
|
+
const styles = bindings.styles ?? {};
|
|
10
|
+
const upTo = Math.max(this.breakpoints.indexOf(breakpoint), 0);
|
|
11
|
+
const currentBpIndex = this.breakpoints.indexOf(breakpoint);
|
|
12
|
+
|
|
13
|
+
// Maps now store sets of all override indices per key for correct ancestor lookup
|
|
14
|
+
const overriddenInputsMap = new Map();
|
|
15
|
+
const overriddenStylesMap = new Map();
|
|
16
|
+
|
|
17
|
+
// 1) Merge overrides and track all override indices for inputs and styles
|
|
18
|
+
for (let i = 0; i <= upTo; i++) {
|
|
19
|
+
const bp = this.breakpoints[i];
|
|
20
|
+
const override = overrides[bp];
|
|
21
|
+
if (!override) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (override.inputs) {
|
|
25
|
+
for (const key in override.inputs) {
|
|
26
|
+
if (!overriddenInputsMap.has(key)) {
|
|
27
|
+
overriddenInputsMap.set(key, new Set());
|
|
28
|
+
}
|
|
29
|
+
overriddenInputsMap.get(key).add(i);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (override.styles) {
|
|
33
|
+
for (const key in override.styles) {
|
|
34
|
+
if (!overriddenStylesMap.has(key)) {
|
|
35
|
+
overriddenStylesMap.set(key, new Set());
|
|
36
|
+
}
|
|
37
|
+
overriddenStylesMap.get(key).add(i);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Also consider base bindings as overrides at index 0 if not already present
|
|
43
|
+
for (const key in inputs) {
|
|
44
|
+
if (!overriddenInputsMap.has(key)) {
|
|
45
|
+
overriddenInputsMap.set(key, new Set([0]));
|
|
46
|
+
} else {
|
|
47
|
+
overriddenInputsMap.get(key).add(0);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
for (const key in styles) {
|
|
51
|
+
if (!overriddenStylesMap.has(key)) {
|
|
52
|
+
overriddenStylesMap.set(key, new Set([0]));
|
|
53
|
+
} else {
|
|
54
|
+
overriddenStylesMap.get(key).add(0);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// 2) Compute inheritance info for inputs
|
|
59
|
+
const inputsInheritance = {};
|
|
60
|
+
for (const key of Object.keys(inputs)) {
|
|
61
|
+
const normalizedKey = this.normalizeBindingKey(key);
|
|
62
|
+
const isResponsive = this.responsiveInputPaths.has(normalizedKey);
|
|
63
|
+
// Skip non-responsive input keys
|
|
64
|
+
if (!isResponsive) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// If responsive, normalize key to ignore indexes for inheritance checks
|
|
69
|
+
const lookupKey = isResponsive ? normalizedKey : key;
|
|
70
|
+
|
|
71
|
+
// Find the greatest index <= currentBpIndex where key is overridden
|
|
72
|
+
const overrideIndices = overriddenInputsMap.get(lookupKey) ?? new Set();
|
|
73
|
+
let lastOverrideIndex = -1;
|
|
74
|
+
for (const idx of overrideIndices) {
|
|
75
|
+
if (idx <= currentBpIndex && idx > lastOverrideIndex) {
|
|
76
|
+
lastOverrideIndex = idx;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const overridden = lastOverrideIndex === currentBpIndex;
|
|
80
|
+
|
|
81
|
+
// Find nearest ancestor breakpoint less than currentBpIndex
|
|
82
|
+
let inheritedFromIndex = 0; // Use `desktop` as fallback.
|
|
83
|
+
for (let j = currentBpIndex - 1; j >= 0; j--) {
|
|
84
|
+
if (overrideIndices.has(j)) {
|
|
85
|
+
inheritedFromIndex = j;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const inheritedFrom = inheritedFromIndex >= 0 ? this.breakpoints[inheritedFromIndex] : undefined;
|
|
90
|
+
inputsInheritance[key] = {
|
|
91
|
+
overridden,
|
|
92
|
+
inheritedFrom: breakpoint === inheritedFrom ? undefined : inheritedFrom
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// 3) Compute inheritance info for styles
|
|
97
|
+
const stylesInheritance = {};
|
|
98
|
+
const keys = new Set([...Object.keys(styles), ...Array.from(overriddenStylesMap.keys())]);
|
|
99
|
+
for (const key of keys) {
|
|
100
|
+
const overrideIndices = overriddenStylesMap.get(key) ?? new Set();
|
|
101
|
+
let lastOverrideIndex = -1;
|
|
102
|
+
for (const idx of overrideIndices) {
|
|
103
|
+
if (idx <= currentBpIndex && idx > lastOverrideIndex) {
|
|
104
|
+
lastOverrideIndex = idx;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const overridden = lastOverrideIndex === currentBpIndex;
|
|
108
|
+
let inheritedFromIndex = 0; // Use `desktop` as fallback.
|
|
109
|
+
for (let j = currentBpIndex - 1; j >= 0; j--) {
|
|
110
|
+
if (overrideIndices.has(j)) {
|
|
111
|
+
inheritedFromIndex = j;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const inheritedFrom = inheritedFromIndex >= 0 ? this.breakpoints[inheritedFromIndex] : undefined;
|
|
116
|
+
stylesInheritance[key] = {
|
|
117
|
+
overridden,
|
|
118
|
+
inheritedFrom: breakpoint === inheritedFrom ? undefined : inheritedFrom
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
inputs: inputsInheritance,
|
|
123
|
+
styles: stylesInheritance
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
normalizeBindingKey(path) {
|
|
127
|
+
return path.replace(/\[\d+\]/g, "");
|
|
128
|
+
}
|
|
129
|
+
getResponsiveInputPaths(inputsAst) {
|
|
130
|
+
const responsivePaths = new Set();
|
|
131
|
+
const traverse = (nodes, prefix) => {
|
|
132
|
+
for (const node of nodes) {
|
|
133
|
+
const currentPath = [...prefix, node.name].join("/");
|
|
134
|
+
if (node.input?.responsive) {
|
|
135
|
+
responsivePaths.add(currentPath);
|
|
136
|
+
}
|
|
137
|
+
if (node.children.length) {
|
|
138
|
+
traverse(node.children, [...prefix, node.name]);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
traverse(inputsAst, []);
|
|
143
|
+
return responsivePaths;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
//# sourceMappingURL=InheritanceProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["InheritanceProcessor","constructor","breakpoints","inputsAst","responsiveInputPaths","getResponsiveInputPaths","getInheritanceMap","bindings","breakpoint","overrides","inputs","styles","upTo","Math","max","indexOf","currentBpIndex","overriddenInputsMap","Map","overriddenStylesMap","i","bp","override","key","has","set","Set","get","add","inputsInheritance","Object","keys","normalizedKey","normalizeBindingKey","isResponsive","lookupKey","overrideIndices","lastOverrideIndex","idx","overridden","inheritedFromIndex","j","inheritedFrom","undefined","stylesInheritance","Array","from","path","replace","responsivePaths","traverse","nodes","prefix","node","currentPath","name","join","input","responsive","children","length"],"sources":["InheritanceProcessor.ts"],"sourcesContent":["import type { DocumentElementBindings } from \"~/types\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter\";\n\nexport type InheritanceInfo = {\n inputs: Record<\n string,\n {\n overridden: boolean;\n inheritedFrom?: string;\n }\n >;\n styles: Record<\n string,\n {\n overridden: boolean;\n inheritedFrom?: string;\n }\n >;\n};\n\nexport class InheritanceProcessor {\n private breakpoints: string[];\n private responsiveInputPaths: Set<string>;\n\n constructor(breakpoints: string[], inputsAst: InputAstNode[]) {\n this.breakpoints = breakpoints;\n this.responsiveInputPaths = this.getResponsiveInputPaths(inputsAst);\n }\n\n public getInheritanceMap(bindings: DocumentElementBindings, breakpoint: string) {\n const overrides = bindings.overrides ?? {};\n const inputs = bindings.inputs ?? {};\n const styles = bindings.styles ?? {};\n\n const upTo = Math.max(this.breakpoints.indexOf(breakpoint), 0);\n const currentBpIndex = this.breakpoints.indexOf(breakpoint);\n\n // Maps now store sets of all override indices per key for correct ancestor lookup\n const overriddenInputsMap = new Map<string, Set<number>>();\n const overriddenStylesMap = new Map<string, Set<number>>();\n\n // 1) Merge overrides and track all override indices for inputs and styles\n for (let i = 0; i <= upTo; i++) {\n const bp = this.breakpoints[i];\n const override = overrides[bp];\n if (!override) {\n continue;\n }\n\n if (override.inputs) {\n for (const key in override.inputs) {\n if (!overriddenInputsMap.has(key)) {\n overriddenInputsMap.set(key, new Set());\n }\n overriddenInputsMap.get(key)!.add(i);\n }\n }\n if (override.styles) {\n for (const key in override.styles) {\n if (!overriddenStylesMap.has(key)) {\n overriddenStylesMap.set(key, new Set());\n }\n overriddenStylesMap.get(key)!.add(i);\n }\n }\n }\n\n // Also consider base bindings as overrides at index 0 if not already present\n for (const key in inputs) {\n if (!overriddenInputsMap.has(key)) {\n overriddenInputsMap.set(key, new Set([0]));\n } else {\n overriddenInputsMap.get(key)!.add(0);\n }\n }\n for (const key in styles) {\n if (!overriddenStylesMap.has(key)) {\n overriddenStylesMap.set(key, new Set([0]));\n } else {\n overriddenStylesMap.get(key)!.add(0);\n }\n }\n\n // 2) Compute inheritance info for inputs\n const inputsInheritance: InheritanceInfo[\"inputs\"] = {};\n for (const key of Object.keys(inputs)) {\n const normalizedKey = this.normalizeBindingKey(key);\n const isResponsive = this.responsiveInputPaths.has(normalizedKey);\n // Skip non-responsive input keys\n if (!isResponsive) {\n continue;\n }\n\n // If responsive, normalize key to ignore indexes for inheritance checks\n const lookupKey = isResponsive ? normalizedKey : key;\n\n // Find the greatest index <= currentBpIndex where key is overridden\n const overrideIndices = overriddenInputsMap.get(lookupKey) ?? new Set();\n\n let lastOverrideIndex = -1;\n for (const idx of overrideIndices) {\n if (idx <= currentBpIndex && idx > lastOverrideIndex) {\n lastOverrideIndex = idx;\n }\n }\n\n const overridden = lastOverrideIndex === currentBpIndex;\n\n // Find nearest ancestor breakpoint less than currentBpIndex\n let inheritedFromIndex = 0; // Use `desktop` as fallback.\n for (let j = currentBpIndex - 1; j >= 0; j--) {\n if (overrideIndices.has(j)) {\n inheritedFromIndex = j;\n break;\n }\n }\n\n const inheritedFrom =\n inheritedFromIndex >= 0 ? this.breakpoints[inheritedFromIndex] : undefined;\n\n inputsInheritance[key] = {\n overridden,\n inheritedFrom: breakpoint === inheritedFrom ? undefined : inheritedFrom\n };\n }\n\n // 3) Compute inheritance info for styles\n const stylesInheritance: InheritanceInfo[\"styles\"] = {};\n const keys = new Set([...Object.keys(styles), ...Array.from(overriddenStylesMap.keys())]);\n\n for (const key of keys) {\n const overrideIndices = overriddenStylesMap.get(key) ?? new Set();\n\n let lastOverrideIndex = -1;\n for (const idx of overrideIndices) {\n if (idx <= currentBpIndex && idx > lastOverrideIndex) {\n lastOverrideIndex = idx;\n }\n }\n\n const overridden = lastOverrideIndex === currentBpIndex;\n\n let inheritedFromIndex = 0; // Use `desktop` as fallback.\n for (let j = currentBpIndex - 1; j >= 0; j--) {\n if (overrideIndices.has(j)) {\n inheritedFromIndex = j;\n break;\n }\n }\n\n const inheritedFrom =\n inheritedFromIndex >= 0 ? this.breakpoints[inheritedFromIndex] : undefined;\n\n stylesInheritance[key] = {\n overridden,\n inheritedFrom: breakpoint === inheritedFrom ? undefined : inheritedFrom\n };\n }\n\n return {\n inputs: inputsInheritance,\n styles: stylesInheritance\n };\n }\n\n private normalizeBindingKey(path: string): string {\n return path.replace(/\\[\\d+\\]/g, \"\");\n }\n\n private getResponsiveInputPaths(inputsAst: InputAstNode[]): Set<string> {\n const responsivePaths = new Set<string>();\n\n const traverse = (nodes: InputAstNode[], prefix: string[]) => {\n for (const node of nodes) {\n const currentPath = [...prefix, node.name].join(\"/\");\n if (node.input?.responsive) {\n responsivePaths.add(currentPath);\n }\n if (node.children.length) {\n traverse(node.children, [...prefix, node.name]);\n }\n }\n };\n\n traverse(inputsAst, []);\n return responsivePaths;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|