@webiny/website-builder-sdk 6.0.0-alpha.5 → 6.0.0-rc.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/BindingsProcessor.test.js +1 -0
- package/BindingsProcessor.test.js.map +1 -1
- package/BindingsResolver.d.ts +1 -1
- package/BindingsResolver.js +2 -2
- package/BindingsResolver.js.map +1 -1
- package/BindingsResolver.test.js +1 -0
- package/BindingsResolver.test.js.map +1 -1
- package/DocumentStore.d.ts +1 -1
- package/ElementFactory.js.map +1 -1
- package/HotkeyManager.js +1 -1
- package/HotkeyManager.js.map +1 -1
- package/InheritanceProcessor.d.ts +2 -2
- package/InheritanceProcessor.test.js +1 -0
- package/InheritanceProcessor.test.js.map +1 -1
- package/InputsBindingsProcessor.test.js +1 -0
- package/InputsBindingsProcessor.test.js.map +1 -1
- package/InputsUpdater.d.ts +1 -1
- package/Logger.d.ts +2 -1
- package/README.md +10 -2
- package/StylesUpdater.d.ts +1 -1
- package/Theme.js +3 -10
- package/Theme.js.map +1 -1
- package/createInput.d.ts +123 -15
- package/createInput.js +32 -0
- package/createInput.js.map +1 -1
- package/dataProviders/DefaultDataProvider.d.ts +1 -1
- package/dataProviders/GET_PAGE_BY_ID.d.ts +1 -1
- package/dataProviders/GET_PAGE_BY_ID.js +1 -0
- 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 +1 -0
- package/dataProviders/GET_PAGE_BY_PATH.js.map +1 -1
- package/dataProviders/LIST_PUBLISHED_PAGES.d.ts +1 -1
- package/dataProviders/LIST_PUBLISHED_PAGES.js +1 -0
- package/dataProviders/LIST_PUBLISHED_PAGES.js.map +1 -1
- package/documentOperations/SetGlobalStyleBinding.js.map +1 -1
- package/documentOperations/SetInputBindingOverride.js.map +1 -1
- package/documentOperations/SetStyleBindingOverride.js.map +1 -1
- package/generateElementId.d.ts +1 -1
- package/generateElementId.js +0 -1
- package/generateElementId.js.map +1 -1
- package/index.d.ts +1 -1
- package/index.js +0 -1
- package/index.js.map +1 -1
- package/jsonPatch.d.ts +1 -1
- package/messenger/Messenger.js +6 -6
- package/messenger/Messenger.js.map +1 -1
- package/package.json +14 -19
- package/types/WebsiteBuilderTheme.d.ts +42 -45
- package/types/WebsiteBuilderTheme.js.map +1 -1
- package/types.d.ts +26 -4
- package/types.js.map +1 -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/types/LexicalEditorTheme.d.ts +0 -2
- package/types/LexicalEditorTheme.js +0 -3
- package/types/LexicalEditorTheme.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["describe","it","expect","BindingsProcessor","breakpoints","processor","bindings","inputs","title","id","static","type","count","expression","styles","paddingTop","backgroundColor","overrides","tablet","mobile","result","getBindings","toEqual","toBe"],"sources":["BindingsProcessor.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { BindingsProcessor } from \"./BindingsProcessor.js\";\nimport type { DocumentElementBindings } from \"~/types.js\";\n\ndescribe(\"BindingsProcessor\", () => {\n const breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n const processor = new BindingsProcessor(breakpoints);\n\n const bindings: DocumentElementBindings = {\n inputs: {\n title: { id: \"title\", static: \"Hello\", type: \"text\" },\n count: { id: \"count\", static: 1, type: \"number\", expression: \"$state.count\" }\n },\n styles: {\n paddingTop: { static: \"10px\" },\n backgroundColor: { static: \"white\" }\n },\n overrides: {\n tablet: {\n inputs: {\n title: { id: \"title\", static: \"Hello Tablet\", type: \"text\" }\n },\n styles: {\n backgroundColor: { static: \"gray\" }\n }\n },\n mobile: {\n inputs: {\n count: { id: \"count\", static: 3, type: \"number\" }\n },\n styles: {\n paddingTop: { static: \"5px\" }\n }\n }\n }\n };\n\n it(\"should return unmodified bindings when base breakpoint is specified\", () => {\n const result = processor.getBindings(bindings, \"desktop\");\n expect(result.inputs).toEqual(bindings.inputs);\n expect(result.styles).toEqual(bindings.styles);\n });\n\n it(\"should merge tablet overrides\", () => {\n const result = processor.getBindings(bindings, \"tablet\");\n expect(result.inputs?.title.static).toBe(\"Hello Tablet\");\n expect(result.inputs?.count.static).toBe(1);\n expect(result.inputs?.count.expression).toBe(\"$state.count\");\n expect(result.styles?.backgroundColor?.static).toBe(\"gray\");\n expect(result.styles?.paddingTop?.static).toBe(\"10px\");\n });\n\n it(\"should merge mobile and tablet overrides\", () => {\n const result = processor.getBindings(bindings, \"mobile\");\n expect(result.inputs?.title.static).toBe(\"Hello Tablet\");\n expect(result.inputs?.count.static).toBe(3);\n expect(result.inputs?.count.expression).toBe(\"$state.count\");\n expect(result.styles?.backgroundColor?.static).toBe(\"gray\");\n expect(result.styles?.paddingTop?.static).toBe(\"5px\");\n });\n\n it(\"should ignore unknown breakpoints\", () => {\n const result = processor.getBindings(bindings, \"unknown\");\n expect(result.inputs).toEqual(bindings.inputs);\n expect(result.styles).toEqual(bindings.styles);\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
package/BindingsResolver.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ComponentInput, DocumentElement, DocumentElementBindings, DocumentState, ResolvedElement } from "./types.js";
|
|
2
2
|
import type { InputAstNode } from "./ComponentManifestToAstConverter.js";
|
|
3
3
|
export interface OnResolved {
|
|
4
4
|
(value: any, input: ComponentInput): any;
|
package/BindingsResolver.js
CHANGED
|
@@ -108,7 +108,7 @@ export class BindingsResolver {
|
|
|
108
108
|
if (binding.expression) {
|
|
109
109
|
return this.evaluateExpression(binding.expression, context);
|
|
110
110
|
}
|
|
111
|
-
if (
|
|
111
|
+
if (binding.static) {
|
|
112
112
|
return binding.static;
|
|
113
113
|
}
|
|
114
114
|
return undefined;
|
|
@@ -125,7 +125,7 @@ export class BindingsResolver {
|
|
|
125
125
|
finalExpression = finalExpression.replace(/\.([0-9]+)/g, "[$1]");
|
|
126
126
|
const scopedFn = new Function(...Object.keys(context), `return ${finalExpression};`);
|
|
127
127
|
return scopedFn(...Object.values(context));
|
|
128
|
-
} catch
|
|
128
|
+
} catch {
|
|
129
129
|
return undefined;
|
|
130
130
|
}
|
|
131
131
|
}
|
package/BindingsResolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["toJS","BindingsResolver","constructor","state","resolveElement","element","elementBindings","inputAst","onResolved","repeatBindingArray","$repeat","items","resolveBinding","Array","isArray","map","item","resolveSingleInstance","undefined","resolvedElement","id","inputs","styles","context","$","bindings","resolveInputsFromAst","nodes","prefix","target","node","pathParts","name","path","join","binding","value","input","defaultValue","finalValue","children","length","list","uniqueIndexes","getUniqueIndexesFromPath","index","childTarget","slice","resolvedStyles","Object","entries","flatKey","pattern","RegExp","indexes","keys","reduce","acc","key","match","push","parseInt","from","Set","sort","a","b","expression","evaluateExpression","static","finalExpression","trim","startsWith","replace","scopedFn","Function","values","e"],"sources":["BindingsResolver.ts"],"sourcesContent":["import { toJS } from \"mobx\";\nimport type {\n DocumentElement,\n DocumentState,\n ResolvedElement,\n ComponentInput,\n ValueBinding,\n DocumentElementBindings,\n SerializableCSSStyleDeclaration,\n DocumentElementStyleBindings\n} from \"~/types.js\";\nimport type { InputAstNode } from \"./ComponentManifestToAstConverter.js\";\n\nexport interface OnResolved {\n (value: any, input: ComponentInput): any;\n}\n\nexport type ResolveElementParams = {\n element: DocumentElement;\n elementBindings: DocumentElementBindings;\n inputAst: InputAstNode[];\n onResolved?: OnResolved;\n};\n\nexport class BindingsResolver {\n private readonly state: DocumentState;\n\n constructor(state: DocumentState) {\n this.state = state;\n }\n\n public resolveElement({\n element,\n elementBindings,\n inputAst,\n onResolved\n }: ResolveElementParams): ResolvedElement[] {\n const repeatBindingArray = elementBindings.$repeat;\n\n if (repeatBindingArray) {\n const items = this.resolveBinding(repeatBindingArray, { state: toJS(this.state) });\n\n if (!Array.isArray(items)) {\n return [];\n }\n\n return items.map(item => {\n return this.resolveSingleInstance(\n element,\n elementBindings,\n item,\n inputAst,\n onResolved\n );\n });\n }\n\n return [\n this.resolveSingleInstance(element, elementBindings, undefined, inputAst, onResolved)\n ];\n }\n\n private resolveSingleInstance(\n element: DocumentElement,\n elementBindings: DocumentElementBindings,\n item: Record<string, any> | undefined,\n inputAst: InputAstNode[],\n onResolved?: OnResolved\n ): ResolvedElement {\n const resolvedElement: ResolvedElement = {\n id: element.id,\n inputs: {},\n styles: {}\n };\n\n const context = { state: this.state, $: item };\n const bindings = elementBindings.inputs ?? {};\n\n const resolveInputsFromAst = (\n nodes: InputAstNode[],\n prefix: string[],\n target: Record<string, any>\n ) => {\n for (const node of nodes) {\n const pathParts = [...prefix, node.name];\n const path = pathParts.join(\"/\");\n const binding = bindings[path];\n const value = this.resolveBinding(binding, context) ?? node.input.defaultValue;\n\n const finalValue = onResolved ? onResolved(value, node.input) : value;\n\n if (node.children.length > 0) {\n if (node.list) {\n const uniqueIndexes = this.getUniqueIndexesFromPath(path, bindings);\n\n target[node.name] = uniqueIndexes.map(index => {\n const childTarget: Record<string, any> = {};\n resolveInputsFromAst(\n node.children,\n [...pathParts.slice(0, -1), `${node.name}/${index}`],\n childTarget\n );\n return childTarget;\n });\n } else {\n const childTarget: Record<string, any> = {};\n resolveInputsFromAst(node.children, pathParts, childTarget);\n target[node.name] = childTarget;\n }\n } else if (node.list) {\n // List node with no children (e.g., slot or primitive list)\n const uniqueIndexes = this.getUniqueIndexesFromPath(path, bindings);\n\n // If binding is e.g., `leftColumn/0`, we'll have `0` in unique indexes.\n if (uniqueIndexes.length > 0) {\n target[node.name] = uniqueIndexes.map(index => {\n const binding = bindings[`${node.name}/${index}`];\n const value =\n this.resolveBinding(binding, context) ?? node.input.defaultValue;\n return onResolved ? onResolved(value, node.input) : value;\n });\n } else {\n // If binding is a simple `children`, we simply assign the resolved value.\n target[node.name] = finalValue;\n }\n } else if (finalValue !== undefined) {\n target[node.name] = finalValue;\n }\n }\n };\n\n resolveInputsFromAst(inputAst, [], resolvedElement.inputs);\n\n // Resolve styles\n const styles: DocumentElementStyleBindings = elementBindings.styles\n ? elementBindings.styles ?? {}\n : {};\n\n const resolvedStyles: SerializableCSSStyleDeclaration = {};\n\n for (const [path, binding] of Object.entries(styles)) {\n if (binding) {\n // @ts-expect-error We're positive this is correct.\n resolvedStyles[path] = this.resolveBinding(binding, context);\n }\n }\n\n return {\n ...resolvedElement,\n styles: resolvedStyles\n };\n }\n\n private getUniqueIndexesFromPath(flatKey: string, bindings: DocumentElementBindings) {\n const pattern = new RegExp(`^${flatKey}\\\\/(\\\\d+)`);\n\n const indexes = Object.keys(bindings).reduce((acc: number[], key) => {\n const match = key.match(pattern);\n if (match) {\n acc.push(parseInt(match[1], 10));\n }\n return acc;\n }, []);\n\n return Array.from(new Set(indexes)).sort((a, b) => a - b);\n }\n\n private resolveBinding(binding: ValueBinding | undefined, context: Record<string, any>): any {\n if (typeof binding === \"undefined\") {\n return undefined;\n }\n\n if (binding.expression) {\n return this.evaluateExpression(binding.expression, context);\n }\n\n if (typeof binding.static !== \"undefined\") {\n return binding.static;\n }\n\n return undefined;\n }\n\n private evaluateExpression(expression: string | undefined, context: Record<string, any> = {}) {\n if (!expression || expression === \"$noop\") {\n return undefined;\n }\n\n try {\n let finalExpression = expression.trim();\n\n if (finalExpression.startsWith(\"$state\")) {\n finalExpression = finalExpression.replace(/^\\$state/, \"state\");\n }\n\n finalExpression = finalExpression.replace(/\\.([0-9]+)/g, \"[$1]\");\n\n const scopedFn = new Function(...Object.keys(context), `return ${finalExpression};`);\n return scopedFn(...Object.values(context));\n } catch (e) {\n return undefined;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["toJS","BindingsResolver","constructor","state","resolveElement","element","elementBindings","inputAst","onResolved","repeatBindingArray","$repeat","items","resolveBinding","Array","isArray","map","item","resolveSingleInstance","undefined","resolvedElement","id","inputs","styles","context","$","bindings","resolveInputsFromAst","nodes","prefix","target","node","pathParts","name","path","join","binding","value","input","defaultValue","finalValue","children","length","list","uniqueIndexes","getUniqueIndexesFromPath","index","childTarget","slice","resolvedStyles","Object","entries","flatKey","pattern","RegExp","indexes","keys","reduce","acc","key","match","push","parseInt","from","Set","sort","a","b","expression","evaluateExpression","static","finalExpression","trim","startsWith","replace","scopedFn","Function","values"],"sources":["BindingsResolver.ts"],"sourcesContent":["import { toJS } from \"mobx\";\nimport type {\n ComponentInput,\n DocumentElement,\n DocumentElementBindings,\n DocumentElementStyleBindings,\n DocumentState,\n ResolvedElement,\n SerializableCSSStyleDeclaration,\n ValueBinding\n} from \"~/types.js\";\nimport type { InputAstNode } from \"./ComponentManifestToAstConverter.js\";\n\nexport interface OnResolved {\n (value: any, input: ComponentInput): any;\n}\n\nexport type ResolveElementParams = {\n element: DocumentElement;\n elementBindings: DocumentElementBindings;\n inputAst: InputAstNode[];\n onResolved?: OnResolved;\n};\n\nexport class BindingsResolver {\n private readonly state: DocumentState;\n\n constructor(state: DocumentState) {\n this.state = state;\n }\n\n public resolveElement({\n element,\n elementBindings,\n inputAst,\n onResolved\n }: ResolveElementParams): ResolvedElement[] {\n const repeatBindingArray = elementBindings.$repeat;\n\n if (repeatBindingArray) {\n const items = this.resolveBinding(repeatBindingArray, { state: toJS(this.state) });\n\n if (!Array.isArray(items)) {\n return [];\n }\n\n return items.map(item => {\n return this.resolveSingleInstance(\n element,\n elementBindings,\n item,\n inputAst,\n onResolved\n );\n });\n }\n\n return [\n this.resolveSingleInstance(element, elementBindings, undefined, inputAst, onResolved)\n ];\n }\n\n private resolveSingleInstance(\n element: DocumentElement,\n elementBindings: DocumentElementBindings,\n item: Record<string, any> | undefined,\n inputAst: InputAstNode[],\n onResolved?: OnResolved\n ): ResolvedElement {\n const resolvedElement: ResolvedElement = {\n id: element.id,\n inputs: {},\n styles: {}\n };\n\n const context = { state: this.state, $: item };\n const bindings = elementBindings.inputs ?? {};\n\n const resolveInputsFromAst = (\n nodes: InputAstNode[],\n prefix: string[],\n target: Record<string, any>\n ) => {\n for (const node of nodes) {\n const pathParts = [...prefix, node.name];\n const path = pathParts.join(\"/\");\n const binding = bindings[path];\n const value = this.resolveBinding(binding, context) ?? node.input.defaultValue;\n\n const finalValue = onResolved ? onResolved(value, node.input) : value;\n\n if (node.children.length > 0) {\n if (node.list) {\n const uniqueIndexes = this.getUniqueIndexesFromPath(path, bindings);\n\n target[node.name] = uniqueIndexes.map(index => {\n const childTarget: Record<string, any> = {};\n resolveInputsFromAst(\n node.children,\n [...pathParts.slice(0, -1), `${node.name}/${index}`],\n childTarget\n );\n return childTarget;\n });\n } else {\n const childTarget: Record<string, any> = {};\n resolveInputsFromAst(node.children, pathParts, childTarget);\n target[node.name] = childTarget;\n }\n } else if (node.list) {\n // List node with no children (e.g., slot or primitive list)\n const uniqueIndexes = this.getUniqueIndexesFromPath(path, bindings);\n\n // If binding is e.g., `leftColumn/0`, we'll have `0` in unique indexes.\n if (uniqueIndexes.length > 0) {\n target[node.name] = uniqueIndexes.map(index => {\n const binding = bindings[`${node.name}/${index}`];\n const value =\n this.resolveBinding(binding, context) ?? node.input.defaultValue;\n return onResolved ? onResolved(value, node.input) : value;\n });\n } else {\n // If binding is a simple `children`, we simply assign the resolved value.\n target[node.name] = finalValue;\n }\n } else if (finalValue !== undefined) {\n target[node.name] = finalValue;\n }\n }\n };\n\n resolveInputsFromAst(inputAst, [], resolvedElement.inputs);\n\n // Resolve styles\n const styles: DocumentElementStyleBindings = elementBindings.styles\n ? (elementBindings.styles ?? {})\n : {};\n\n const resolvedStyles: SerializableCSSStyleDeclaration = {};\n\n for (const [path, binding] of Object.entries(styles)) {\n if (binding) {\n // @ts-expect-error We're positive this is correct.\n resolvedStyles[path] = this.resolveBinding(binding, context);\n }\n }\n\n return {\n ...resolvedElement,\n styles: resolvedStyles\n };\n }\n\n private getUniqueIndexesFromPath(flatKey: string, bindings: DocumentElementBindings) {\n const pattern = new RegExp(`^${flatKey}\\\\/(\\\\d+)`);\n\n const indexes = Object.keys(bindings).reduce((acc: number[], key) => {\n const match = key.match(pattern);\n if (match) {\n acc.push(parseInt(match[1], 10));\n }\n return acc;\n }, []);\n\n return Array.from(new Set(indexes)).sort((a, b) => a - b);\n }\n\n private resolveBinding(binding: ValueBinding | undefined, context: Record<string, any>): any {\n if (typeof binding === \"undefined\") {\n return undefined;\n }\n\n if (binding.expression) {\n return this.evaluateExpression(binding.expression, context);\n }\n\n if (binding.static) {\n return binding.static;\n }\n\n return undefined;\n }\n\n private evaluateExpression(expression: string | undefined, context: Record<string, any> = {}) {\n if (!expression || expression === \"$noop\") {\n return undefined;\n }\n\n try {\n let finalExpression = expression.trim();\n\n if (finalExpression.startsWith(\"$state\")) {\n finalExpression = finalExpression.replace(/^\\$state/, \"state\");\n }\n\n finalExpression = finalExpression.replace(/\\.([0-9]+)/g, \"[$1]\");\n\n const scopedFn = new Function(...Object.keys(context), `return ${finalExpression};`);\n return scopedFn(...Object.values(context));\n } catch {\n return undefined;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/BindingsResolver.test.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BindingsResolver","createSlotInput","createTextInput","ComponentManifestToAstConverter","describe","baseElement","id","type","component","name","rootElement","it","state","user","bindings","inputs","text","expression","static","styles","paddingTop","inputAst","convert","resolver","resolved","resolveElement","element","elementBindings","expect","toBe","toEqual","root","children","list","qizw1hgqjvj8g5a43szzc","title","backgroundColor","marginTop","cwld8kxy0qhhtaql42lr5","elements","parent","slot","renderer","label","fields","leftColumn","rightColumn","toBeUndefined","defaultValue","onResolved","value","input","products","$repeat","toHaveLength","invalid"],"sources":["BindingsResolver.test.ts"],"sourcesContent":["import { BindingsResolver } from \"./BindingsResolver.js\";\nimport type {\n DocumentElement,\n DocumentState,\n DocumentElementBindings,\n DocumentBindings\n} from \"~/types.js\";\nimport { createSlotInput, createTextInput } from \"~/createInput.js\";\nimport { ComponentManifestToAstConverter } from \"~/ComponentManifestToAstConverter.js\";\n\ndescribe(\"BindingsResolver\", () => {\n const baseElement: DocumentElement = {\n id: \"test1\",\n type: \"Webiny/Element\",\n component: {\n name: \"Webiny/Text\"\n }\n };\n\n const rootElement: DocumentElement = {\n id: \"root\",\n type: \"Webiny/Element\",\n component: {\n name: \"Webiny/Root\"\n }\n };\n\n it(\"resolves input with expression binding\", () => {\n const state: DocumentState = {\n user: { name: \"Alice\" }\n };\n\n const bindings: DocumentElementBindings = {\n inputs: {\n text: {\n id: \"text\",\n type: \"text\",\n expression: \"$state.user.name\",\n static: \"Static fallback\"\n }\n },\n styles: {\n paddingTop: {\n static: \"10px\"\n }\n }\n };\n\n const inputs = [createTextInput({ name: \"text\" })];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const [resolved] = resolver.resolveElement({\n element: baseElement,\n inputAst,\n elementBindings: bindings\n });\n\n expect(resolved.inputs.text).toBe(\"Alice\");\n expect(resolved.styles).toEqual({ paddingTop: \"10px\" });\n });\n\n it(\"resolves nested objects\", () => {\n const state: DocumentState = {};\n\n const bindings: DocumentBindings = {\n root: {\n inputs: {\n children: {\n id: \"children\",\n type: \"slot\",\n list: true,\n static: [\"qizw1hgqjvj8g5a43szzc\"]\n }\n }\n },\n qizw1hgqjvj8g5a43szzc: {\n inputs: {\n title: {\n id: \"title\",\n static: \"Default Columns Title\",\n type: \"text\"\n },\n \"leftColumn/0\": {\n id: \"slot\",\n static: [\"7znyr9z2cpizegnrk2rhu\"],\n type: \"slot\",\n list: true\n },\n \"rightColumn/0\": {\n id: \"slot\",\n static: [\"cwld8kxy0qhhtaql42lr5\"],\n type: \"slot\",\n list: true\n }\n },\n styles: {\n paddingTop: {\n static: \"20px\"\n },\n backgroundColor: {\n static: \"#5c9a12\"\n }\n }\n },\n \"7znyr9z2cpizegnrk2rhu\": {\n inputs: {\n title: {\n id: \"title\",\n static: \"Left Column Title\",\n type: \"text\"\n },\n children: {\n id: \"slot\",\n static: [],\n type: \"slot\",\n list: true\n }\n },\n styles: {\n backgroundColor: {\n static: \"red\"\n },\n marginTop: {\n static: \"20px\"\n }\n }\n },\n cwld8kxy0qhhtaql42lr5: {\n inputs: {\n title: {\n id: \"title\",\n static: \"Right Column Title\",\n type: \"text\"\n },\n children: {\n id: \"slot\",\n static: [],\n type: \"slot\",\n list: true\n }\n },\n styles: {\n backgroundColor: {\n static: \"blue\"\n },\n marginTop: {\n static: \"20px\"\n }\n }\n }\n };\n\n const elements = {\n root: {\n type: \"Webiny/Element\",\n id: \"root\",\n component: {\n name: \"Webiny/Root\"\n }\n },\n qizw1hgqjvj8g5a43szzc: {\n type: \"Webiny/Element\",\n id: \"qizw1hgqjvj8g5a43szzc\",\n parent: {\n id: \"root\",\n slot: \"children\"\n },\n component: {\n name: \"Webiny/TwoColumns\"\n }\n },\n \"7znyr9z2cpizegnrk2rhu\": {\n type: \"Webiny/Element\",\n id: \"7znyr9z2cpizegnrk2rhu\",\n parent: {\n id: \"qizw1hgqjvj8g5a43szzc\",\n slot: \"leftColumn/0\"\n },\n component: {\n name: \"Webiny/TextWithDropzone\"\n }\n },\n cwld8kxy0qhhtaql42lr5: {\n type: \"Webiny/Element\",\n id: \"cwld8kxy0qhhtaql42lr5\",\n parent: {\n id: \"qizw1hgqjvj8g5a43szzc\",\n slot: \"rightColumn/0\"\n },\n component: {\n name: \"Webiny/TextWithDropzone\"\n }\n }\n };\n\n const inputs = [\n {\n type: \"text\",\n renderer: \"Webiny/Input\",\n name: \"title\",\n label: \"Title\",\n fields: []\n },\n {\n type: \"slot\",\n list: true,\n renderer: \"Webiny/Slot\",\n name: \"leftColumn\",\n fields: []\n },\n {\n type: \"slot\",\n list: true,\n renderer: \"Webiny/Slot\",\n name: \"rightColumn\",\n fields: []\n }\n ];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const [resolved] = resolver.resolveElement({\n element: elements[\"qizw1hgqjvj8g5a43szzc\"] as DocumentElement,\n inputAst,\n elementBindings: bindings[\"qizw1hgqjvj8g5a43szzc\"]\n });\n\n expect(resolved.inputs.title).toBe(\"Default Columns Title\");\n expect(resolved.inputs.leftColumn).toEqual([[\"7znyr9z2cpizegnrk2rhu\"]]);\n expect(resolved.inputs.rightColumn).toEqual([[\"cwld8kxy0qhhtaql42lr5\"]]);\n });\n\n it(\"falls back to static if no expression is provided\", () => {\n const state: DocumentState = {};\n\n const bindings: DocumentElementBindings = {\n inputs: {\n text: {\n id: \"text\",\n type: \"text\",\n static: \"Static only\"\n }\n }\n };\n\n const inputs = [createTextInput({ name: \"text\" })];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const [resolved] = resolver.resolveElement({\n element: baseElement,\n inputAst,\n elementBindings: bindings\n });\n\n expect(resolved.inputs.text).toBe(\"Static only\");\n });\n\n it(\"uses undefined if expression fails and no static exists\", () => {\n const state: DocumentState = {};\n\n const bindings: DocumentElementBindings = {\n inputs: {\n text: {\n id: \"text\",\n type: \"text\",\n static: \"Fallback\",\n expression: \"$.unknown.value\"\n }\n }\n };\n\n const inputs = [createTextInput({ name: \"text\" })];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const [resolved] = resolver.resolveElement({\n element: baseElement,\n inputAst,\n elementBindings: bindings\n });\n\n expect(resolved.inputs.text).toBeUndefined();\n });\n\n it(\"uses input's `defaultValue` if binding doesn't exist\", () => {\n const state: DocumentState = {};\n\n const bindings: DocumentElementBindings = {\n inputs: {}\n };\n\n const inputs = [createSlotInput({ name: \"children\", defaultValue: [] })];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const [resolved] = resolver.resolveElement({\n element: rootElement,\n inputAst,\n elementBindings: bindings,\n onResolved(value, input) {\n if (input.type === \"slot\") {\n return \"slot\";\n }\n\n return value;\n }\n });\n\n expect(resolved.inputs.children).toEqual(\"slot\");\n });\n\n it(\"handles $repeat using expression and maps items\", () => {\n const state: DocumentState = {\n products: [{ title: \"Shirt\" }, { title: \"Hat\" }]\n };\n\n const bindings: DocumentElementBindings = {\n $repeat: {\n expression: \"$state.products\"\n },\n inputs: {\n text: {\n id: \"text\",\n type: \"text\",\n expression: \"$.title\",\n static: \"Unnamed\"\n }\n }\n };\n\n const inputs = [createTextInput({ name: \"text\" })];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const resolved = resolver.resolveElement({\n element: baseElement,\n inputAst,\n elementBindings: bindings\n });\n\n expect(resolved).toHaveLength(2);\n expect(resolved[0].inputs.text).toBe(\"Shirt\");\n expect(resolved[1].inputs.text).toBe(\"Hat\");\n });\n\n it(\"returns empty array if $repeat doesn't resolve to an array\", () => {\n const state: DocumentState = {\n invalid: 42\n };\n\n const bindings: DocumentElementBindings = {\n $repeat: {\n expression: \"$state.invalid\"\n },\n inputs: {\n text: {\n id: \"text\",\n type: \"text\",\n static: \"Should not be used\"\n }\n }\n };\n\n const inputs = [createTextInput({ name: \"text\" })];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const resolved = resolver.resolveElement({\n element: baseElement,\n inputAst,\n elementBindings: bindings\n });\n\n expect(resolved).toEqual([]);\n });\n\n it(\"resolves binding that refers to a specific array index\", () => {\n const state: DocumentState = {\n list: [{ text: \"First item text\" }, { text: \"Second item text\" }]\n };\n\n const bindings: DocumentElementBindings = {\n inputs: {\n text: {\n id: \"text\",\n type: \"text\",\n static: \"Static fallback\",\n expression: \"$state.list.0.text\"\n }\n }\n };\n\n const inputs = [createTextInput({ name: \"text\" })];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const [resolved] = resolver.resolveElement({\n element: baseElement,\n inputAst,\n elementBindings: bindings\n });\n\n expect(resolved.inputs.text).toBe(\"First item text\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["describe","it","expect","BindingsResolver","createSlotInput","createTextInput","ComponentManifestToAstConverter","baseElement","id","type","component","name","rootElement","state","user","bindings","inputs","text","expression","static","styles","paddingTop","inputAst","convert","resolver","resolved","resolveElement","element","elementBindings","toBe","toEqual","root","children","list","qizw1hgqjvj8g5a43szzc","title","backgroundColor","marginTop","cwld8kxy0qhhtaql42lr5","elements","parent","slot","renderer","label","fields","leftColumn","rightColumn","toBeUndefined","defaultValue","onResolved","value","input","products","$repeat","toHaveLength","invalid"],"sources":["BindingsResolver.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { BindingsResolver } from \"./BindingsResolver.js\";\nimport type {\n DocumentElement,\n DocumentState,\n DocumentElementBindings,\n DocumentBindings\n} from \"~/types.js\";\nimport { createSlotInput, createTextInput } from \"~/createInput.js\";\nimport { ComponentManifestToAstConverter } from \"~/ComponentManifestToAstConverter.js\";\n\ndescribe(\"BindingsResolver\", () => {\n const baseElement: DocumentElement = {\n id: \"test1\",\n type: \"Webiny/Element\",\n component: {\n name: \"Webiny/Text\"\n }\n };\n\n const rootElement: DocumentElement = {\n id: \"root\",\n type: \"Webiny/Element\",\n component: {\n name: \"Webiny/Root\"\n }\n };\n\n it(\"resolves input with expression binding\", () => {\n const state: DocumentState = {\n user: { name: \"Alice\" }\n };\n\n const bindings: DocumentElementBindings = {\n inputs: {\n text: {\n id: \"text\",\n type: \"text\",\n expression: \"$state.user.name\",\n static: \"Static fallback\"\n }\n },\n styles: {\n paddingTop: {\n static: \"10px\"\n }\n }\n };\n\n const inputs = [createTextInput({ name: \"text\" })];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const [resolved] = resolver.resolveElement({\n element: baseElement,\n inputAst,\n elementBindings: bindings\n });\n\n expect(resolved.inputs.text).toBe(\"Alice\");\n expect(resolved.styles).toEqual({ paddingTop: \"10px\" });\n });\n\n it(\"resolves nested objects\", () => {\n const state: DocumentState = {};\n\n const bindings: DocumentBindings = {\n root: {\n inputs: {\n children: {\n id: \"children\",\n type: \"slot\",\n list: true,\n static: [\"qizw1hgqjvj8g5a43szzc\"]\n }\n }\n },\n qizw1hgqjvj8g5a43szzc: {\n inputs: {\n title: {\n id: \"title\",\n static: \"Default Columns Title\",\n type: \"text\"\n },\n \"leftColumn/0\": {\n id: \"slot\",\n static: [\"7znyr9z2cpizegnrk2rhu\"],\n type: \"slot\",\n list: true\n },\n \"rightColumn/0\": {\n id: \"slot\",\n static: [\"cwld8kxy0qhhtaql42lr5\"],\n type: \"slot\",\n list: true\n }\n },\n styles: {\n paddingTop: {\n static: \"20px\"\n },\n backgroundColor: {\n static: \"#5c9a12\"\n }\n }\n },\n \"7znyr9z2cpizegnrk2rhu\": {\n inputs: {\n title: {\n id: \"title\",\n static: \"Left Column Title\",\n type: \"text\"\n },\n children: {\n id: \"slot\",\n static: [],\n type: \"slot\",\n list: true\n }\n },\n styles: {\n backgroundColor: {\n static: \"red\"\n },\n marginTop: {\n static: \"20px\"\n }\n }\n },\n cwld8kxy0qhhtaql42lr5: {\n inputs: {\n title: {\n id: \"title\",\n static: \"Right Column Title\",\n type: \"text\"\n },\n children: {\n id: \"slot\",\n static: [],\n type: \"slot\",\n list: true\n }\n },\n styles: {\n backgroundColor: {\n static: \"blue\"\n },\n marginTop: {\n static: \"20px\"\n }\n }\n }\n };\n\n const elements = {\n root: {\n type: \"Webiny/Element\",\n id: \"root\",\n component: {\n name: \"Webiny/Root\"\n }\n },\n qizw1hgqjvj8g5a43szzc: {\n type: \"Webiny/Element\",\n id: \"qizw1hgqjvj8g5a43szzc\",\n parent: {\n id: \"root\",\n slot: \"children\"\n },\n component: {\n name: \"Webiny/TwoColumns\"\n }\n },\n \"7znyr9z2cpizegnrk2rhu\": {\n type: \"Webiny/Element\",\n id: \"7znyr9z2cpizegnrk2rhu\",\n parent: {\n id: \"qizw1hgqjvj8g5a43szzc\",\n slot: \"leftColumn/0\"\n },\n component: {\n name: \"Webiny/TextWithDropzone\"\n }\n },\n cwld8kxy0qhhtaql42lr5: {\n type: \"Webiny/Element\",\n id: \"cwld8kxy0qhhtaql42lr5\",\n parent: {\n id: \"qizw1hgqjvj8g5a43szzc\",\n slot: \"rightColumn/0\"\n },\n component: {\n name: \"Webiny/TextWithDropzone\"\n }\n }\n };\n\n const inputs = [\n {\n type: \"text\",\n renderer: \"Webiny/Input\",\n name: \"title\",\n label: \"Title\",\n fields: []\n },\n {\n type: \"slot\",\n list: true,\n renderer: \"Webiny/Slot\",\n name: \"leftColumn\",\n fields: []\n },\n {\n type: \"slot\",\n list: true,\n renderer: \"Webiny/Slot\",\n name: \"rightColumn\",\n fields: []\n }\n ];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const [resolved] = resolver.resolveElement({\n element: elements[\"qizw1hgqjvj8g5a43szzc\"] as DocumentElement,\n inputAst,\n elementBindings: bindings[\"qizw1hgqjvj8g5a43szzc\"]\n });\n\n expect(resolved.inputs.title).toBe(\"Default Columns Title\");\n expect(resolved.inputs.leftColumn).toEqual([[\"7znyr9z2cpizegnrk2rhu\"]]);\n expect(resolved.inputs.rightColumn).toEqual([[\"cwld8kxy0qhhtaql42lr5\"]]);\n });\n\n it(\"falls back to static if no expression is provided\", () => {\n const state: DocumentState = {};\n\n const bindings: DocumentElementBindings = {\n inputs: {\n text: {\n id: \"text\",\n type: \"text\",\n static: \"Static only\"\n }\n }\n };\n\n const inputs = [createTextInput({ name: \"text\" })];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const [resolved] = resolver.resolveElement({\n element: baseElement,\n inputAst,\n elementBindings: bindings\n });\n\n expect(resolved.inputs.text).toBe(\"Static only\");\n });\n\n it(\"uses undefined if expression fails and no static exists\", () => {\n const state: DocumentState = {};\n\n const bindings: DocumentElementBindings = {\n inputs: {\n text: {\n id: \"text\",\n type: \"text\",\n static: \"Fallback\",\n expression: \"$.unknown.value\"\n }\n }\n };\n\n const inputs = [createTextInput({ name: \"text\" })];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const [resolved] = resolver.resolveElement({\n element: baseElement,\n inputAst,\n elementBindings: bindings\n });\n\n expect(resolved.inputs.text).toBeUndefined();\n });\n\n it(\"uses input's `defaultValue` if binding doesn't exist\", () => {\n const state: DocumentState = {};\n\n const bindings: DocumentElementBindings = {\n inputs: {}\n };\n\n const inputs = [createSlotInput({ name: \"children\", defaultValue: [] })];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const [resolved] = resolver.resolveElement({\n element: rootElement,\n inputAst,\n elementBindings: bindings,\n onResolved(value, input) {\n if (input.type === \"slot\") {\n return \"slot\";\n }\n\n return value;\n }\n });\n\n expect(resolved.inputs.children).toEqual(\"slot\");\n });\n\n it(\"handles $repeat using expression and maps items\", () => {\n const state: DocumentState = {\n products: [{ title: \"Shirt\" }, { title: \"Hat\" }]\n };\n\n const bindings: DocumentElementBindings = {\n $repeat: {\n expression: \"$state.products\"\n },\n inputs: {\n text: {\n id: \"text\",\n type: \"text\",\n expression: \"$.title\",\n static: \"Unnamed\"\n }\n }\n };\n\n const inputs = [createTextInput({ name: \"text\" })];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const resolved = resolver.resolveElement({\n element: baseElement,\n inputAst,\n elementBindings: bindings\n });\n\n expect(resolved).toHaveLength(2);\n expect(resolved[0].inputs.text).toBe(\"Shirt\");\n expect(resolved[1].inputs.text).toBe(\"Hat\");\n });\n\n it(\"returns empty array if $repeat doesn't resolve to an array\", () => {\n const state: DocumentState = {\n invalid: 42\n };\n\n const bindings: DocumentElementBindings = {\n $repeat: {\n expression: \"$state.invalid\"\n },\n inputs: {\n text: {\n id: \"text\",\n type: \"text\",\n static: \"Should not be used\"\n }\n }\n };\n\n const inputs = [createTextInput({ name: \"text\" })];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const resolved = resolver.resolveElement({\n element: baseElement,\n inputAst,\n elementBindings: bindings\n });\n\n expect(resolved).toEqual([]);\n });\n\n it(\"resolves binding that refers to a specific array index\", () => {\n const state: DocumentState = {\n list: [{ text: \"First item text\" }, { text: \"Second item text\" }]\n };\n\n const bindings: DocumentElementBindings = {\n inputs: {\n text: {\n id: \"text\",\n type: \"text\",\n static: \"Static fallback\",\n expression: \"$state.list.0.text\"\n }\n }\n };\n\n const inputs = [createTextInput({ name: \"text\" })];\n const inputAst = ComponentManifestToAstConverter.convert(inputs);\n const resolver = new BindingsResolver(state);\n const [resolved] = resolver.resolveElement({\n element: baseElement,\n inputAst,\n elementBindings: bindings\n });\n\n expect(resolved.inputs.text).toBe(\"First item text\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
package/DocumentStore.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export declare class DocumentStore<TDocument extends Document = Document> {
|
|
|
8
8
|
setDocument(doc: TDocument): void;
|
|
9
9
|
updateDocument(cb: (document: TDocument) => void): void;
|
|
10
10
|
getDocument(): TDocument | null;
|
|
11
|
-
getElement(id: string): import("
|
|
11
|
+
getElement(id: string): import("~/types.js").DocumentElement | null;
|
|
12
12
|
updateElement(id: string, patch: Partial<any>): void;
|
|
13
13
|
applyPatch(patch: JsonPatchOperation[]): void;
|
|
14
14
|
waitForDocument(): Promise<TDocument>;
|
package/ElementFactory.js.map
CHANGED
|
@@ -1 +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.js\";\nimport type {\n DocumentElement,\n ComponentManifest,\n InputValueBinding,\n StyleValueBinding,\n CssProperties\n} from \"~/types.js\";\nimport { type IDocumentOperation, DocumentOperations } from \"./documentOperations/index.js\";\nimport {\n ComponentManifestToAstConverter,\n type InputAstNode\n} from \"./ComponentManifestToAstConverter.js\";\nimport { ComponentInputTraverser } from \"./ComponentInputTraverser.js\";\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":[]}
|
|
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.js\";\nimport type {\n DocumentElement,\n ComponentManifest,\n InputValueBinding,\n StyleValueBinding,\n CssProperties\n} from \"~/types.js\";\nimport { type IDocumentOperation, DocumentOperations } from \"./documentOperations/index.js\";\nimport {\n ComponentManifestToAstConverter,\n type InputAstNode\n} from \"./ComponentManifestToAstConverter.js\";\nimport { ComponentInputTraverser } from \"./ComponentInputTraverser.js\";\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\n ? undefined\n : (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/HotkeyManager.js
CHANGED
package/HotkeyManager.js.map
CHANGED
|
@@ -1 +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,
|
|
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,SAASA,QAAQ,QAAQ,WAAW;AAOpC,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":[]}
|
|
@@ -17,11 +17,11 @@ export declare class InheritanceProcessor {
|
|
|
17
17
|
getInheritanceMap(bindings: DocumentElementBindings, breakpoint: string): {
|
|
18
18
|
inputs: Record<string, {
|
|
19
19
|
overridden: boolean;
|
|
20
|
-
inheritedFrom?: string
|
|
20
|
+
inheritedFrom?: string;
|
|
21
21
|
}>;
|
|
22
22
|
styles: Record<string, {
|
|
23
23
|
overridden: boolean;
|
|
24
|
-
inheritedFrom?: string
|
|
24
|
+
inheritedFrom?: string;
|
|
25
25
|
}>;
|
|
26
26
|
};
|
|
27
27
|
private normalizeBindingKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["InheritanceProcessor","inputsAst","name","type","list","path","children","input","responsive","describe","breakpoints","processor","it","bindings","inputs","rowGap","static","title","styles","paddingTop","color","overrides","tablet","mobile","desktopResult","getInheritanceMap","expect","toEqual","overridden","inheritedFrom","undefined","toBeUndefined","tabletResult","mobileResult","result","backgroundColor","marginTop"],"sources":["InheritanceProcessor.test.ts"],"sourcesContent":["import { InheritanceProcessor } from \"./InheritanceProcessor.js\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter.js\";\n\n// Mock AST for inputs\nconst inputsAst: InputAstNode[] = [\n {\n name: \"rowGap\",\n type: \"text\",\n list: false,\n path: \"rowGap\",\n children: [],\n input: { type: \"text\", responsive: true, name: \"rowGap\" }\n },\n {\n name: \"title\",\n type: \"text\",\n list: false,\n path: \"title\",\n children: [],\n input: { type: \"text\", responsive: false, name: \"title\" }\n }\n];\n\ndescribe(\"InheritanceProcessor\", () => {\n const breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n const processor = new InheritanceProcessor(breakpoints, inputsAst);\n\n it(\"should correctly compute inheritance info for responsive inputs and styles\", () => {\n const bindings = {\n inputs: {\n rowGap: { static: \"20px\" },\n title: { static: \"Default Title\" }\n },\n styles: {\n paddingTop: { static: \"10px\" },\n color: { static: \"red\" }\n },\n overrides: {\n tablet: {\n styles: {\n paddingTop: { static: \"5px\" }\n }\n },\n mobile: {\n inputs: {\n rowGap: { static: \"10px\" }\n },\n styles: {\n paddingTop: { static: \"2px\" },\n color: { static: \"blue\" }\n }\n }\n }\n };\n\n // desktop breakpoint\n const desktopResult = processor.getInheritanceMap(bindings as any, \"desktop\");\n\n expect(desktopResult.inputs[\"rowGap\"]).toEqual({\n overridden: true,\n inheritedFrom: undefined\n });\n expect(desktopResult.inputs[\"title\"]).toBeUndefined(); // not responsive\n expect(desktopResult.styles[\"paddingTop\"]).toEqual({\n overridden: true,\n inheritedFrom: undefined\n });\n expect(desktopResult.styles[\"color\"]).toEqual({\n overridden: true,\n inheritedFrom: undefined\n });\n\n // tablet breakpoint\n const tabletResult = processor.getInheritanceMap(bindings as any, \"tablet\");\n\n expect(tabletResult.inputs[\"rowGap\"]).toEqual({\n overridden: false,\n inheritedFrom: \"desktop\"\n });\n expect(tabletResult.styles[\"paddingTop\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n expect(tabletResult.styles[\"color\"]).toEqual({\n overridden: false,\n inheritedFrom: \"desktop\"\n });\n\n // mobile breakpoint\n const mobileResult = processor.getInheritanceMap(bindings as any, \"mobile\");\n\n expect(mobileResult.inputs[\"rowGap\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n expect(mobileResult.styles[\"paddingTop\"]).toEqual({\n overridden: true,\n inheritedFrom: \"tablet\"\n });\n expect(mobileResult.styles[\"color\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n });\n\n it(\"should skip non-responsive inputs in inheritance info\", () => {\n const bindings = {\n inputs: {\n title: { static: \"Static Title\" }\n },\n styles: {},\n overrides: {}\n };\n\n const result = processor.getInheritanceMap(bindings as any, \"desktop\");\n expect(result.inputs[\"title\"]).toBeUndefined();\n });\n\n it(\"should handle missing overrides gracefully\", () => {\n const bindings = {\n inputs: {\n rowGap: { static: \"20px\" }\n },\n styles: {\n paddingTop: { static: \"10px\" }\n }\n // no overrides\n };\n\n const result = processor.getInheritanceMap(bindings as any, \"mobile\");\n expect(result.inputs[\"rowGap\"]).toEqual({ overridden: false, inheritedFrom: \"desktop\" });\n expect(result.styles[\"paddingTop\"]).toEqual({\n overridden: false,\n inheritedFrom: \"desktop\"\n });\n });\n\n it(\"should handle missing ancestor values gracefully\", () => {\n const bindings = {\n inputs: {},\n styles: {\n backgroundColor: {\n static: \"#ec8787\"\n }\n },\n overrides: {\n tablet: {\n styles: {}\n },\n mobile: {\n styles: {\n backgroundColor: {\n static: \"#50e3c2\"\n },\n marginTop: {\n static: \"122px\"\n }\n }\n }\n }\n };\n\n const result = processor.getInheritanceMap(bindings as any, \"mobile\");\n expect(result.styles[\"backgroundColor\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n\n expect(result.styles[\"marginTop\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["describe","it","expect","InheritanceProcessor","inputsAst","name","type","list","path","children","input","responsive","breakpoints","processor","bindings","inputs","rowGap","static","title","styles","paddingTop","color","overrides","tablet","mobile","desktopResult","getInheritanceMap","toEqual","overridden","inheritedFrom","undefined","toBeUndefined","tabletResult","mobileResult","result","backgroundColor","marginTop"],"sources":["InheritanceProcessor.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { InheritanceProcessor } from \"./InheritanceProcessor.js\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter.js\";\n\n// Mock AST for inputs\nconst inputsAst: InputAstNode[] = [\n {\n name: \"rowGap\",\n type: \"text\",\n list: false,\n path: \"rowGap\",\n children: [],\n input: { type: \"text\", responsive: true, name: \"rowGap\" }\n },\n {\n name: \"title\",\n type: \"text\",\n list: false,\n path: \"title\",\n children: [],\n input: { type: \"text\", responsive: false, name: \"title\" }\n }\n];\n\ndescribe(\"InheritanceProcessor\", () => {\n const breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n const processor = new InheritanceProcessor(breakpoints, inputsAst);\n\n it(\"should correctly compute inheritance info for responsive inputs and styles\", () => {\n const bindings = {\n inputs: {\n rowGap: { static: \"20px\" },\n title: { static: \"Default Title\" }\n },\n styles: {\n paddingTop: { static: \"10px\" },\n color: { static: \"red\" }\n },\n overrides: {\n tablet: {\n styles: {\n paddingTop: { static: \"5px\" }\n }\n },\n mobile: {\n inputs: {\n rowGap: { static: \"10px\" }\n },\n styles: {\n paddingTop: { static: \"2px\" },\n color: { static: \"blue\" }\n }\n }\n }\n };\n\n // desktop breakpoint\n const desktopResult = processor.getInheritanceMap(bindings as any, \"desktop\");\n\n expect(desktopResult.inputs[\"rowGap\"]).toEqual({\n overridden: true,\n inheritedFrom: undefined\n });\n expect(desktopResult.inputs[\"title\"]).toBeUndefined(); // not responsive\n expect(desktopResult.styles[\"paddingTop\"]).toEqual({\n overridden: true,\n inheritedFrom: undefined\n });\n expect(desktopResult.styles[\"color\"]).toEqual({\n overridden: true,\n inheritedFrom: undefined\n });\n\n // tablet breakpoint\n const tabletResult = processor.getInheritanceMap(bindings as any, \"tablet\");\n\n expect(tabletResult.inputs[\"rowGap\"]).toEqual({\n overridden: false,\n inheritedFrom: \"desktop\"\n });\n expect(tabletResult.styles[\"paddingTop\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n expect(tabletResult.styles[\"color\"]).toEqual({\n overridden: false,\n inheritedFrom: \"desktop\"\n });\n\n // mobile breakpoint\n const mobileResult = processor.getInheritanceMap(bindings as any, \"mobile\");\n\n expect(mobileResult.inputs[\"rowGap\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n expect(mobileResult.styles[\"paddingTop\"]).toEqual({\n overridden: true,\n inheritedFrom: \"tablet\"\n });\n expect(mobileResult.styles[\"color\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n });\n\n it(\"should skip non-responsive inputs in inheritance info\", () => {\n const bindings = {\n inputs: {\n title: { static: \"Static Title\" }\n },\n styles: {},\n overrides: {}\n };\n\n const result = processor.getInheritanceMap(bindings as any, \"desktop\");\n expect(result.inputs[\"title\"]).toBeUndefined();\n });\n\n it(\"should handle missing overrides gracefully\", () => {\n const bindings = {\n inputs: {\n rowGap: { static: \"20px\" }\n },\n styles: {\n paddingTop: { static: \"10px\" }\n }\n // no overrides\n };\n\n const result = processor.getInheritanceMap(bindings as any, \"mobile\");\n expect(result.inputs[\"rowGap\"]).toEqual({ overridden: false, inheritedFrom: \"desktop\" });\n expect(result.styles[\"paddingTop\"]).toEqual({\n overridden: false,\n inheritedFrom: \"desktop\"\n });\n });\n\n it(\"should handle missing ancestor values gracefully\", () => {\n const bindings = {\n inputs: {},\n styles: {\n backgroundColor: {\n static: \"#ec8787\"\n }\n },\n overrides: {\n tablet: {\n styles: {}\n },\n mobile: {\n styles: {\n backgroundColor: {\n static: \"#50e3c2\"\n },\n marginTop: {\n static: \"122px\"\n }\n }\n }\n }\n };\n\n const result = processor.getInheritanceMap(bindings as any, \"mobile\");\n expect(result.styles[\"backgroundColor\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n\n expect(result.styles[\"marginTop\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["InputsBindingsProcessor","ElementFactory","describe","simpleAst","name","type","list","path","children","input","label","fields","withSlotAst","breakpoints","baseBindings","inputs","title","id","static","styles","overrides","tablet","mobile","getInputsBindingsProcessor","bindings","ast","elementFactory","acceptsChildren","renderer","defaultValue","processor","it","deep","toDeepInputs","expect","toEqual","items","newInputs","updater","createUpdate","rebuilt","elementId","applyToDocument","elementBindings","toBe","toBeUndefined","rawBindings","patch","createJsonPatch","arrayContaining","objectContaining","op","value","deepInputs","push","action","params","component","elements","toMatchObject","any","String"],"sources":["InputsBindingsProcessor.test.ts"],"sourcesContent":["import { InputsBindingsProcessor } from \"./InputBindingsProcessor.js\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter.js\";\nimport type { DocumentElementBindings } from \"~/types.js\";\nimport { ElementFactory } from \"~/ElementFactory.js\";\n\ndescribe(\"InputsBindingsProcessor\", () => {\n // Example simple AST (you can expand as needed)\n const simpleAst: InputAstNode[] = [\n {\n name: \"title\",\n type: \"text\",\n list: false,\n path: \"title\",\n children: [],\n input: {\n type: \"text\",\n name: \"title\",\n label: \"Title\"\n }\n },\n {\n name: \"items\",\n type: \"object\",\n list: true,\n path: \"items\",\n children: [\n {\n name: \"label\",\n type: \"text\",\n list: false,\n path: \"items.label\",\n children: [],\n input: {\n type: \"text\",\n name: \"label\",\n label: \"Label\"\n }\n }\n ],\n input: {\n type: \"object\",\n name: \"items\",\n list: true,\n fields: [\n {\n type: \"text\",\n name: \"label\",\n label: \"Label\"\n }\n ]\n }\n }\n ];\n\n const withSlotAst: InputAstNode[] = [\n {\n path: \"children\",\n children: [],\n name: \"children\",\n type: \"slot\",\n list: false,\n input: {\n type: \"slot\",\n name: \"children\",\n label: \"Children\"\n }\n }\n ];\n\n const breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n\n const baseBindings: DocumentElementBindings = {\n inputs: {\n title: { id: \"title\", static: \"Base Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Base Label 1\",\n type: \"text\"\n },\n \"items/1/label\": {\n id: \"label1\",\n static: \"Base Label 2\",\n type: \"text\"\n }\n },\n styles: {}\n };\n\n const overrides: DocumentElementBindings[\"overrides\"] = {\n tablet: {\n inputs: {\n title: { id: \"title\", static: \"Tablet Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Tablet Label 1\",\n type: \"text\"\n }\n }\n },\n mobile: {\n inputs: {\n title: { id: \"title\", static: \"Mobile Title\", type: \"text\" }\n }\n }\n };\n\n const getInputsBindingsProcessor = (\n bindings: DocumentElementBindings = baseBindings,\n ast = simpleAst\n ) => {\n const elementFactory = new ElementFactory({\n \"Webiny/GridColumn\": {\n name: \"Webiny/GridColumn\",\n label: \"Column\",\n acceptsChildren: true,\n inputs: [\n {\n type: \"slot\",\n list: true,\n renderer: \"Webiny/Slot\",\n name: \"children\",\n defaultValue: []\n }\n ]\n }\n });\n const processor = new InputsBindingsProcessor(\n \"elementId\",\n ast,\n breakpoints,\n bindings,\n elementFactory\n );\n\n return { processor, bindings };\n };\n\n it(\"toDeep should convert flat bindings to nested object\", () => {\n const { processor } = getInputsBindingsProcessor();\n\n const deep = processor.toDeepInputs(baseBindings.inputs ?? {});\n expect(deep).toEqual({\n title: \"Base Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n });\n });\n\n it(\"applyInputs should assign base breakpoint inputs correctly\", () => {\n const { processor } = getInputsBindingsProcessor();\n\n const newInputs = {\n title: \"New Base Title\",\n items: [{ label: \"New Label 1\" }, { label: \"New Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs.title.static).toBe(\"New Base Title\");\n expect(elementBindings.inputs[\"items/0/label\"].static).toBe(\"New Label 1\");\n expect(elementBindings.inputs[\"items/1/label\"].static).toBe(\"New Label 2\");\n expect(elementBindings.overrides).toBeUndefined();\n });\n\n it(\"applyInputs should assign overrides correctly, skipping inherited values\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Mobile Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs.title.static).toBe(\"Mobile Title\");\n // Items are same as base, so should not be in overrides\n expect(elementBindings.overrides?.mobile.inputs?.[\"items/0/label\"]).toBeUndefined();\n });\n\n it(\"createPatch should create correct json patch for input changes\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor, bindings } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Changed Title\",\n items: [{ label: \"Changed Label 1\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const patch = updater.createJsonPatch(bindings);\n\n // You're seeing the weird `~1` delimiter because that's what fast-json-patch does with indexes.\n expect(patch).toEqual(\n expect.arrayContaining([\n expect.objectContaining({\n op: \"remove\",\n path: \"/inputs/items~11~1label\"\n }),\n expect.objectContaining({\n op: \"replace\",\n path: \"/inputs/title/static\",\n value: \"Changed Title\"\n }),\n expect.objectContaining({\n op: \"replace\",\n path: \"/inputs/items~10~1label/static\",\n value: \"Changed Label 1\"\n })\n ])\n );\n });\n\n it(\"applyInputs removes keys missing in new inputs\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: {\n ...baseBindings.inputs,\n \"some/key\": { id: \"someKey\", static: \"toRemove\", type: \"text\" }\n },\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Base Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs[\"some/key\"]).toBeUndefined();\n });\n\n it(\"createUpdate should apply correct changes to the document\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings, [\n ...simpleAst,\n ...withSlotAst\n ]);\n\n const deepInputs = processor.toDeepInputs(rawBindings.inputs!);\n\n deepInputs.items.push({ label: \"New Label 1\" });\n deepInputs.children = {\n action: \"CreateElement\",\n params: {\n component: \"Webiny/GridColumn\"\n }\n };\n\n const updater = processor.createUpdate(deepInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } }, elements: {} };\n updater.applyToDocument(rebuilt);\n\n expect(rebuilt.bindings.elementId.inputs).toMatchObject({\n title: { id: \"title\", static: \"Base Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Base Label 1\",\n type: \"text\"\n },\n \"items/1/label\": {\n id: \"label1\",\n static: \"Base Label 2\",\n type: \"text\"\n },\n \"items/2/label\": {\n id: expect.any(String),\n static: \"New Label 1\",\n type: \"text\"\n },\n children: {\n id: expect.any(String),\n static: expect.any(String),\n type: \"slot\"\n }\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["describe","it","expect","InputsBindingsProcessor","ElementFactory","simpleAst","name","type","list","path","children","input","label","fields","withSlotAst","breakpoints","baseBindings","inputs","title","id","static","styles","overrides","tablet","mobile","getInputsBindingsProcessor","bindings","ast","elementFactory","acceptsChildren","renderer","defaultValue","processor","deep","toDeepInputs","toEqual","items","newInputs","updater","createUpdate","rebuilt","elementId","applyToDocument","elementBindings","toBe","toBeUndefined","rawBindings","patch","createJsonPatch","arrayContaining","objectContaining","op","value","deepInputs","push","action","params","component","elements","toMatchObject","any","String"],"sources":["InputsBindingsProcessor.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { InputsBindingsProcessor } from \"./InputBindingsProcessor.js\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter.js\";\nimport type { DocumentElementBindings } from \"~/types.js\";\nimport { ElementFactory } from \"~/ElementFactory.js\";\n\ndescribe(\"InputsBindingsProcessor\", () => {\n // Example simple AST (you can expand as needed)\n const simpleAst: InputAstNode[] = [\n {\n name: \"title\",\n type: \"text\",\n list: false,\n path: \"title\",\n children: [],\n input: {\n type: \"text\",\n name: \"title\",\n label: \"Title\"\n }\n },\n {\n name: \"items\",\n type: \"object\",\n list: true,\n path: \"items\",\n children: [\n {\n name: \"label\",\n type: \"text\",\n list: false,\n path: \"items.label\",\n children: [],\n input: {\n type: \"text\",\n name: \"label\",\n label: \"Label\"\n }\n }\n ],\n input: {\n type: \"object\",\n name: \"items\",\n list: true,\n fields: [\n {\n type: \"text\",\n name: \"label\",\n label: \"Label\"\n }\n ]\n }\n }\n ];\n\n const withSlotAst: InputAstNode[] = [\n {\n path: \"children\",\n children: [],\n name: \"children\",\n type: \"slot\",\n list: false,\n input: {\n type: \"slot\",\n name: \"children\",\n label: \"Children\"\n }\n }\n ];\n\n const breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n\n const baseBindings: DocumentElementBindings = {\n inputs: {\n title: { id: \"title\", static: \"Base Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Base Label 1\",\n type: \"text\"\n },\n \"items/1/label\": {\n id: \"label1\",\n static: \"Base Label 2\",\n type: \"text\"\n }\n },\n styles: {}\n };\n\n const overrides: DocumentElementBindings[\"overrides\"] = {\n tablet: {\n inputs: {\n title: { id: \"title\", static: \"Tablet Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Tablet Label 1\",\n type: \"text\"\n }\n }\n },\n mobile: {\n inputs: {\n title: { id: \"title\", static: \"Mobile Title\", type: \"text\" }\n }\n }\n };\n\n const getInputsBindingsProcessor = (\n bindings: DocumentElementBindings = baseBindings,\n ast = simpleAst\n ) => {\n const elementFactory = new ElementFactory({\n \"Webiny/GridColumn\": {\n name: \"Webiny/GridColumn\",\n label: \"Column\",\n acceptsChildren: true,\n inputs: [\n {\n type: \"slot\",\n list: true,\n renderer: \"Webiny/Slot\",\n name: \"children\",\n defaultValue: []\n }\n ]\n }\n });\n const processor = new InputsBindingsProcessor(\n \"elementId\",\n ast,\n breakpoints,\n bindings,\n elementFactory\n );\n\n return { processor, bindings };\n };\n\n it(\"toDeep should convert flat bindings to nested object\", () => {\n const { processor } = getInputsBindingsProcessor();\n\n const deep = processor.toDeepInputs(baseBindings.inputs ?? {});\n expect(deep).toEqual({\n title: \"Base Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n });\n });\n\n it(\"applyInputs should assign base breakpoint inputs correctly\", () => {\n const { processor } = getInputsBindingsProcessor();\n\n const newInputs = {\n title: \"New Base Title\",\n items: [{ label: \"New Label 1\" }, { label: \"New Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs.title.static).toBe(\"New Base Title\");\n expect(elementBindings.inputs[\"items/0/label\"].static).toBe(\"New Label 1\");\n expect(elementBindings.inputs[\"items/1/label\"].static).toBe(\"New Label 2\");\n expect(elementBindings.overrides).toBeUndefined();\n });\n\n it(\"applyInputs should assign overrides correctly, skipping inherited values\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Mobile Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs.title.static).toBe(\"Mobile Title\");\n // Items are same as base, so should not be in overrides\n expect(elementBindings.overrides?.mobile.inputs?.[\"items/0/label\"]).toBeUndefined();\n });\n\n it(\"createPatch should create correct json patch for input changes\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor, bindings } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Changed Title\",\n items: [{ label: \"Changed Label 1\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const patch = updater.createJsonPatch(bindings);\n\n // You're seeing the weird `~1` delimiter because that's what fast-json-patch does with indexes.\n expect(patch).toEqual(\n expect.arrayContaining([\n expect.objectContaining({\n op: \"remove\",\n path: \"/inputs/items~11~1label\"\n }),\n expect.objectContaining({\n op: \"replace\",\n path: \"/inputs/title/static\",\n value: \"Changed Title\"\n }),\n expect.objectContaining({\n op: \"replace\",\n path: \"/inputs/items~10~1label/static\",\n value: \"Changed Label 1\"\n })\n ])\n );\n });\n\n it(\"applyInputs removes keys missing in new inputs\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: {\n ...baseBindings.inputs,\n \"some/key\": { id: \"someKey\", static: \"toRemove\", type: \"text\" }\n },\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Base Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs[\"some/key\"]).toBeUndefined();\n });\n\n it(\"createUpdate should apply correct changes to the document\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings, [\n ...simpleAst,\n ...withSlotAst\n ]);\n\n const deepInputs = processor.toDeepInputs(rawBindings.inputs!);\n\n deepInputs.items.push({ label: \"New Label 1\" });\n deepInputs.children = {\n action: \"CreateElement\",\n params: {\n component: \"Webiny/GridColumn\"\n }\n };\n\n const updater = processor.createUpdate(deepInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } }, elements: {} };\n updater.applyToDocument(rebuilt);\n\n expect(rebuilt.bindings.elementId.inputs).toMatchObject({\n title: { id: \"title\", static: \"Base Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Base Label 1\",\n type: \"text\"\n },\n \"items/1/label\": {\n id: \"label1\",\n static: \"Base Label 2\",\n type: \"text\"\n },\n \"items/2/label\": {\n id: expect.any(String),\n static: \"New Label 1\",\n type: \"text\"\n },\n children: {\n id: expect.any(String),\n static: expect.any(String),\n type: \"slot\"\n }\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
package/InputsUpdater.d.ts
CHANGED
|
@@ -8,5 +8,5 @@ export declare class InputsUpdater implements IBindingsUpdater {
|
|
|
8
8
|
private elementId;
|
|
9
9
|
constructor(elementId: string, bindings: ElementInputsBindings, operations: IDocumentOperation[]);
|
|
10
10
|
applyToDocument(document: Document): void;
|
|
11
|
-
createJsonPatch(bindings: DocumentElementBindings): import("
|
|
11
|
+
createJsonPatch(bindings: DocumentElementBindings): import("~/jsonPatch.js").JsonPatchOperation[];
|
|
12
12
|
}
|
package/Logger.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import pino from "pino";
|
|
2
|
+
export declare const logger: pino.Logger<never, boolean>;
|