@webiny/website-builder-sdk 6.0.0-alpha.3 → 6.0.0-alpha.5
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 +4 -4
- package/BindingsApi.js +3 -3
- package/BindingsApi.js.map +1 -1
- package/BindingsProcessor.d.ts +1 -1
- package/BindingsProcessor.js.map +1 -1
- package/BindingsProcessor.test.js +1 -1
- package/BindingsProcessor.test.js.map +1 -1
- package/BindingsResolver.d.ts +2 -2
- package/BindingsResolver.js +2 -2
- package/BindingsResolver.js.map +1 -1
- package/BindingsResolver.test.js +3 -3
- package/BindingsResolver.test.js.map +1 -1
- package/ComponentInputTraverser.d.ts +1 -1
- package/ComponentInputTraverser.js.map +1 -1
- package/ComponentManifestToAstConverter.d.ts +1 -1
- package/ComponentManifestToAstConverter.js.map +1 -1
- package/ComponentResolver.d.ts +2 -2
- package/ComponentResolver.js +3 -3
- package/ComponentResolver.js.map +1 -1
- package/ContentSdk.d.ts +3 -3
- package/ContentSdk.js +5 -5
- package/ContentSdk.js.map +1 -1
- package/DocumentStore.d.ts +3 -3
- package/DocumentStore.js +1 -1
- package/DocumentStore.js.map +1 -1
- package/DocumentStoreManager.d.ts +2 -2
- package/DocumentStoreManager.js +1 -1
- package/DocumentStoreManager.js.map +1 -1
- package/EditingSdk.d.ts +2 -2
- package/EditingSdk.js +10 -13
- package/EditingSdk.js.map +1 -1
- package/ElementFactory.d.ts +3 -3
- package/ElementFactory.js +4 -4
- package/ElementFactory.js.map +1 -1
- package/IBindingsUpdater.d.ts +2 -2
- package/IBindingsUpdater.js.map +1 -1
- package/IRedirects.d.ts +1 -1
- package/IRedirects.js.map +1 -1
- package/InheritanceProcessor.d.ts +2 -2
- package/InheritanceProcessor.js.map +1 -1
- package/InheritanceProcessor.test.js +1 -1
- package/InheritanceProcessor.test.js.map +1 -1
- package/InheritedValueResolver.d.ts +1 -1
- package/InheritedValueResolver.js.map +1 -1
- package/InputBindingsProcessor.d.ts +4 -4
- package/InputBindingsProcessor.js +5 -5
- package/InputBindingsProcessor.js.map +1 -1
- package/InputsBindingsProcessor.test.js +2 -2
- package/InputsBindingsProcessor.test.js.map +1 -1
- package/InputsUpdater.d.ts +5 -5
- package/InputsUpdater.js +2 -2
- package/InputsUpdater.js.map +1 -1
- package/LiveSdk.js +1 -1
- package/LiveSdk.js.map +1 -1
- package/Logger.js +7 -4
- package/Logger.js.map +1 -1
- package/NullSdk.d.ts +1 -1
- package/NullSdk.js.map +1 -1
- package/PreviewDocument.js +1 -1
- package/PreviewDocument.js.map +1 -1
- package/PreviewSdk.js +1 -1
- package/PreviewSdk.js.map +1 -1
- package/PreviewViewport.d.ts +1 -2
- package/PreviewViewport.js +1 -21
- package/PreviewViewport.js.map +1 -1
- package/StylesBindingsProcessor.d.ts +2 -2
- package/StylesBindingsProcessor.js +4 -4
- package/StylesBindingsProcessor.js.map +1 -1
- package/StylesUpdater.d.ts +4 -4
- package/StylesUpdater.js +2 -2
- package/StylesUpdater.js.map +1 -1
- package/Theme.d.ts +1 -1
- package/Theme.js +2 -2
- package/Theme.js.map +1 -1
- package/ViewportManager.d.ts +3 -1
- package/ViewportManager.js +5 -1
- package/ViewportManager.js.map +1 -1
- package/createElement.d.ts +1 -1
- package/createElement.js.map +1 -1
- package/createInput.d.ts +1 -1
- package/createInput.js +1 -1
- package/createInput.js.map +1 -1
- package/createTheme.d.ts +1 -1
- package/createTheme.js.map +1 -1
- package/dataProviders/ApiClient.d.ts +6 -1
- package/dataProviders/ApiClient.js +19 -8
- package/dataProviders/ApiClient.js.map +1 -1
- package/dataProviders/DefaultDataProvider.d.ts +1 -1
- package/dataProviders/DefaultDataProvider.js +8 -3
- package/dataProviders/DefaultDataProvider.js.map +1 -1
- package/dataProviders/RedirectsProvider.d.ts +3 -3
- package/dataProviders/RedirectsProvider.js +6 -7
- package/dataProviders/RedirectsProvider.js.map +1 -1
- package/defaultBreakpoints.d.ts +1 -1
- package/defaultBreakpoints.js.map +1 -1
- package/documentOperations/$addElementReferenceToParent.js.map +1 -1
- package/documentOperations/AddElement.d.ts +1 -1
- package/documentOperations/AddElement.js.map +1 -1
- package/documentOperations/AddToParent.d.ts +1 -1
- package/documentOperations/AddToParent.js.map +1 -1
- package/documentOperations/RemoveElement.d.ts +1 -1
- package/documentOperations/RemoveElement.js.map +1 -1
- package/documentOperations/SetGlobalInputBinding.d.ts +1 -1
- package/documentOperations/SetGlobalInputBinding.js.map +1 -1
- package/documentOperations/SetGlobalStyleBinding.d.ts +1 -1
- package/documentOperations/SetGlobalStyleBinding.js.map +1 -1
- package/documentOperations/SetInputBindingOverride.d.ts +1 -1
- package/documentOperations/SetInputBindingOverride.js.map +1 -1
- package/documentOperations/SetStyleBindingOverride.d.ts +1 -1
- package/documentOperations/SetStyleBindingOverride.js.map +1 -1
- package/documentOperations/index.d.ts +8 -8
- package/documentOperations/index.js +7 -7
- package/documentOperations/index.js.map +1 -1
- package/findMatchingAstNode.d.ts +1 -1
- package/findMatchingAstNode.js.map +1 -1
- package/index.d.ts +1 -2
- package/index.js +1 -2
- package/index.js.map +1 -1
- package/lexical/createDefaultLexicalTheme.d.ts +1 -1
- package/lexical/createDefaultLexicalTheme.js.map +1 -1
- package/lexical/createLexicalTheme.d.ts +1 -1
- package/lexical/createLexicalTheme.js +2 -2
- package/lexical/createLexicalTheme.js.map +1 -1
- package/messenger/Messenger.js +3 -1
- package/messenger/Messenger.js.map +1 -1
- package/package.json +4 -4
- package/registerComponentGroup.d.ts +1 -1
- package/registerComponentGroup.js +1 -1
- package/registerComponentGroup.js.map +1 -1
- package/types/WebsiteBuilderTheme.d.ts +1 -1
- package/types/WebsiteBuilderTheme.js.map +1 -1
- package/types.d.ts +5 -3
- package/types.js.map +1 -1
- package/dataProviders/GET_ACTIVE_REDIRECTS.d.ts +0 -1
- package/dataProviders/GET_ACTIVE_REDIRECTS.js +0 -21
- package/dataProviders/GET_ACTIVE_REDIRECTS.js.map +0 -1
package/BindingsApi.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { ElementFactory } from "./ElementFactory";
|
|
2
|
-
import type { InputAstNode } from "./ComponentManifestToAstConverter";
|
|
3
|
-
import type { DocumentElementBindings, Document } from "./types";
|
|
4
|
-
import { type CreateElementParams } from "./createElement";
|
|
1
|
+
import type { ElementFactory } from "./ElementFactory.js";
|
|
2
|
+
import type { InputAstNode } from "./ComponentManifestToAstConverter.js";
|
|
3
|
+
import type { DocumentElementBindings, Document } from "./types.js";
|
|
4
|
+
import { type CreateElementParams } from "./createElement.js";
|
|
5
5
|
export type FlatBindings = Record<string, Record<string, any>>;
|
|
6
6
|
type DeepBindings = Record<string, any>;
|
|
7
7
|
export declare class BindingsApi {
|
package/BindingsApi.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createElement } from "./createElement";
|
|
2
|
-
import { StylesBindingsProcessor } from "./StylesBindingsProcessor";
|
|
3
|
-
import { InputsBindingsProcessor } from "./InputBindingsProcessor";
|
|
1
|
+
import { createElement } from "./createElement.js";
|
|
2
|
+
import { StylesBindingsProcessor } from "./StylesBindingsProcessor.js";
|
|
3
|
+
import { InputsBindingsProcessor } from "./InputBindingsProcessor.js";
|
|
4
4
|
// The BindingsApi class manages the transformation and handling of element bindings,
|
|
5
5
|
// including inputs and styles, for a document element within the editor.
|
|
6
6
|
export class BindingsApi {
|
package/BindingsApi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createElement","StylesBindingsProcessor","InputsBindingsProcessor","BindingsApi","inputs","styles","constructor","elementId","rawBindings","resolvedBindings","inputsAst","elementFactory","breakpoint","breakpoints","inputsProcessor","stylesProcessor","toDeepInputs","toDeepStyles","getPublicApi","params","applyToDocument","document","createUpdate"],"sources":["BindingsApi.ts"],"sourcesContent":["import type { ElementFactory } from \"~/ElementFactory\";\nimport type { InputAstNode } from \"./ComponentManifestToAstConverter\";\nimport type { DocumentElementBindings, Document } from \"~/types\";\nimport { createElement, type CreateElementParams } from \"./createElement\";\nimport { StylesBindingsProcessor } from \"~/StylesBindingsProcessor\";\nimport { InputsBindingsProcessor } from \"~/InputBindingsProcessor\";\n\nexport type FlatBindings = Record<string, Record<string, any>>;\ntype DeepBindings = Record<string, any>;\n\n// The BindingsApi class manages the transformation and handling of element bindings,\n// including inputs and styles, for a document element within the editor.\nexport class BindingsApi {\n public inputs: DeepBindings = {};\n public styles: DeepBindings = {};\n private inputsProcessor: InputsBindingsProcessor;\n private stylesProcessor: StylesBindingsProcessor;\n private breakpoint: string;\n private breakpoints: string[];\n\n // TODO: refactor to pass inputs and styles processor instead of their deps.\n\n // Constructs a new BindingsApi instance for a specific element, providing its\n // raw and resolved bindings, the input AST, an element factory, and the current breakpoint.\n constructor(\n elementId: string,\n rawBindings: DocumentElementBindings,\n resolvedBindings: DocumentElementBindings,\n inputsAst: InputAstNode[],\n elementFactory: ElementFactory,\n breakpoint: string\n ) {\n this.breakpoint = breakpoint;\n // TODO: improve handling of breakpoints.\n this.breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n this.inputsProcessor = new InputsBindingsProcessor(\n elementId,\n inputsAst,\n this.breakpoints,\n rawBindings,\n elementFactory\n );\n this.stylesProcessor = new StylesBindingsProcessor(\n elementId,\n this.breakpoints,\n rawBindings\n );\n this.inputs = this.inputsProcessor.toDeepInputs(resolvedBindings.inputs || {});\n this.styles = this.stylesProcessor.toDeepStyles(resolvedBindings.styles || {});\n }\n\n // Returns the public API for this binding context, exposing deep inputs, styles,\n // and a function to create elements.\n public getPublicApi() {\n return {\n inputs: this.inputs,\n styles: this.styles ?? {},\n createElement: (params: CreateElementParams) => {\n return createElement(params);\n }\n };\n }\n\n public applyToDocument(document: Document) {\n const inputs = this.inputsProcessor.createUpdate(this.inputs, this.breakpoint);\n const styles = this.stylesProcessor.createUpdate(this.styles, this.breakpoint);\n\n inputs.applyToDocument(document);\n styles.applyToDocument(document);\n }\n}\n"],"mappings":"AAGA,SAASA,aAAa;AACtB,SAASC,uBAAuB;AAChC,SAASC,uBAAuB;AAKhC;AACA;AACA,OAAO,MAAMC,WAAW,CAAC;EACdC,MAAM,GAAiB,CAAC,CAAC;EACzBC,MAAM,GAAiB,CAAC,CAAC;EAMhC;;EAEA;EACA;EACAC,WAAWA,CACPC,SAAiB,EACjBC,WAAoC,EACpCC,gBAAyC,EACzCC,SAAyB,EACzBC,cAA8B,EAC9BC,UAAkB,EACpB;IACE,IAAI,CAACA,UAAU,GAAGA,UAAU;IAC5B;IACA,IAAI,CAACC,WAAW,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAClD,IAAI,CAACC,eAAe,GAAG,IAAIZ,uBAAuB,CAC9CK,SAAS,EACTG,SAAS,EACT,IAAI,CAACG,WAAW,EAChBL,WAAW,EACXG,cACJ,CAAC;IACD,IAAI,CAACI,eAAe,GAAG,IAAId,uBAAuB,CAC9CM,SAAS,EACT,IAAI,CAACM,WAAW,EAChBL,WACJ,CAAC;IACD,IAAI,CAACJ,MAAM,GAAG,IAAI,CAACU,eAAe,CAACE,YAAY,CAACP,gBAAgB,CAACL,MAAM,IAAI,CAAC,CAAC,CAAC;IAC9E,IAAI,CAACC,MAAM,GAAG,IAAI,CAACU,eAAe,CAACE,YAAY,CAACR,gBAAgB,CAACJ,MAAM,IAAI,CAAC,CAAC,CAAC;EAClF;;EAEA;EACA;EACOa,YAAYA,CAAA,EAAG;IAClB,OAAO;MACHd,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBC,MAAM,EAAE,IAAI,CAACA,MAAM,IAAI,CAAC,CAAC;MACzBL,aAAa,EAAGmB,MAA2B,IAAK;QAC5C,OAAOnB,aAAa,CAACmB,MAAM,CAAC;MAChC;IACJ,CAAC;EACL;EAEOC,eAAeA,CAACC,QAAkB,EAAE;IACvC,MAAMjB,MAAM,GAAG,IAAI,CAACU,eAAe,CAACQ,YAAY,CAAC,IAAI,CAAClB,MAAM,EAAE,IAAI,CAACQ,UAAU,CAAC;IAC9E,MAAMP,MAAM,GAAG,IAAI,CAACU,eAAe,CAACO,YAAY,CAAC,IAAI,CAACjB,MAAM,EAAE,IAAI,CAACO,UAAU,CAAC;IAE9ER,MAAM,CAACgB,eAAe,CAACC,QAAQ,CAAC;IAChChB,MAAM,CAACe,eAAe,CAACC,QAAQ,CAAC;EACpC;AACJ","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createElement","StylesBindingsProcessor","InputsBindingsProcessor","BindingsApi","inputs","styles","constructor","elementId","rawBindings","resolvedBindings","inputsAst","elementFactory","breakpoint","breakpoints","inputsProcessor","stylesProcessor","toDeepInputs","toDeepStyles","getPublicApi","params","applyToDocument","document","createUpdate"],"sources":["BindingsApi.ts"],"sourcesContent":["import type { ElementFactory } from \"~/ElementFactory.js\";\nimport type { InputAstNode } from \"./ComponentManifestToAstConverter.js\";\nimport type { DocumentElementBindings, Document } from \"~/types.js\";\nimport { createElement, type CreateElementParams } from \"./createElement.js\";\nimport { StylesBindingsProcessor } from \"~/StylesBindingsProcessor.js\";\nimport { InputsBindingsProcessor } from \"~/InputBindingsProcessor.js\";\n\nexport type FlatBindings = Record<string, Record<string, any>>;\ntype DeepBindings = Record<string, any>;\n\n// The BindingsApi class manages the transformation and handling of element bindings,\n// including inputs and styles, for a document element within the editor.\nexport class BindingsApi {\n public inputs: DeepBindings = {};\n public styles: DeepBindings = {};\n private inputsProcessor: InputsBindingsProcessor;\n private stylesProcessor: StylesBindingsProcessor;\n private breakpoint: string;\n private breakpoints: string[];\n\n // TODO: refactor to pass inputs and styles processor instead of their deps.\n\n // Constructs a new BindingsApi instance for a specific element, providing its\n // raw and resolved bindings, the input AST, an element factory, and the current breakpoint.\n constructor(\n elementId: string,\n rawBindings: DocumentElementBindings,\n resolvedBindings: DocumentElementBindings,\n inputsAst: InputAstNode[],\n elementFactory: ElementFactory,\n breakpoint: string\n ) {\n this.breakpoint = breakpoint;\n // TODO: improve handling of breakpoints.\n this.breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n this.inputsProcessor = new InputsBindingsProcessor(\n elementId,\n inputsAst,\n this.breakpoints,\n rawBindings,\n elementFactory\n );\n this.stylesProcessor = new StylesBindingsProcessor(\n elementId,\n this.breakpoints,\n rawBindings\n );\n this.inputs = this.inputsProcessor.toDeepInputs(resolvedBindings.inputs || {});\n this.styles = this.stylesProcessor.toDeepStyles(resolvedBindings.styles || {});\n }\n\n // Returns the public API for this binding context, exposing deep inputs, styles,\n // and a function to create elements.\n public getPublicApi() {\n return {\n inputs: this.inputs,\n styles: this.styles ?? {},\n createElement: (params: CreateElementParams) => {\n return createElement(params);\n }\n };\n }\n\n public applyToDocument(document: Document) {\n const inputs = this.inputsProcessor.createUpdate(this.inputs, this.breakpoint);\n const styles = this.stylesProcessor.createUpdate(this.styles, this.breakpoint);\n\n inputs.applyToDocument(document);\n styles.applyToDocument(document);\n }\n}\n"],"mappings":"AAGA,SAASA,aAAa;AACtB,SAASC,uBAAuB;AAChC,SAASC,uBAAuB;AAKhC;AACA;AACA,OAAO,MAAMC,WAAW,CAAC;EACdC,MAAM,GAAiB,CAAC,CAAC;EACzBC,MAAM,GAAiB,CAAC,CAAC;EAMhC;;EAEA;EACA;EACAC,WAAWA,CACPC,SAAiB,EACjBC,WAAoC,EACpCC,gBAAyC,EACzCC,SAAyB,EACzBC,cAA8B,EAC9BC,UAAkB,EACpB;IACE,IAAI,CAACA,UAAU,GAAGA,UAAU;IAC5B;IACA,IAAI,CAACC,WAAW,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAClD,IAAI,CAACC,eAAe,GAAG,IAAIZ,uBAAuB,CAC9CK,SAAS,EACTG,SAAS,EACT,IAAI,CAACG,WAAW,EAChBL,WAAW,EACXG,cACJ,CAAC;IACD,IAAI,CAACI,eAAe,GAAG,IAAId,uBAAuB,CAC9CM,SAAS,EACT,IAAI,CAACM,WAAW,EAChBL,WACJ,CAAC;IACD,IAAI,CAACJ,MAAM,GAAG,IAAI,CAACU,eAAe,CAACE,YAAY,CAACP,gBAAgB,CAACL,MAAM,IAAI,CAAC,CAAC,CAAC;IAC9E,IAAI,CAACC,MAAM,GAAG,IAAI,CAACU,eAAe,CAACE,YAAY,CAACR,gBAAgB,CAACJ,MAAM,IAAI,CAAC,CAAC,CAAC;EAClF;;EAEA;EACA;EACOa,YAAYA,CAAA,EAAG;IAClB,OAAO;MACHd,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBC,MAAM,EAAE,IAAI,CAACA,MAAM,IAAI,CAAC,CAAC;MACzBL,aAAa,EAAGmB,MAA2B,IAAK;QAC5C,OAAOnB,aAAa,CAACmB,MAAM,CAAC;MAChC;IACJ,CAAC;EACL;EAEOC,eAAeA,CAACC,QAAkB,EAAE;IACvC,MAAMjB,MAAM,GAAG,IAAI,CAACU,eAAe,CAACQ,YAAY,CAAC,IAAI,CAAClB,MAAM,EAAE,IAAI,CAACQ,UAAU,CAAC;IAC9E,MAAMP,MAAM,GAAG,IAAI,CAACU,eAAe,CAACO,YAAY,CAAC,IAAI,CAACjB,MAAM,EAAE,IAAI,CAACO,UAAU,CAAC;IAE9ER,MAAM,CAACgB,eAAe,CAACC,QAAQ,CAAC;IAChChB,MAAM,CAACe,eAAe,CAACC,QAAQ,CAAC;EACpC;AACJ","ignoreList":[]}
|
package/BindingsProcessor.d.ts
CHANGED
package/BindingsProcessor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BindingsProcessor","constructor","breakpoints","getBindings","bindings","breakpoint","result","$repeat","inputs","styles","overrides","upTo","indexOf","i","bp","override","key","styleKey"],"sources":["BindingsProcessor.ts"],"sourcesContent":["import type { DocumentElementBindings, CssProperties } from \"~/types\";\n\ntype RequiredBindings<T extends DocumentElementBindings> = T & {\n inputs: NonNullable<T[\"inputs\"]>;\n styles: NonNullable<T[\"styles\"]>;\n};\n\nexport class BindingsProcessor {\n private readonly breakpoints: string[];\n\n constructor(breakpoints: string[]) {\n this.breakpoints = breakpoints;\n }\n\n public getBindings(bindings: DocumentElementBindings, breakpoint: string) {\n const result: RequiredBindings<DocumentElementBindings> = {\n $repeat: bindings.$repeat,\n inputs: { ...(bindings.inputs || {}) },\n styles: { ...(bindings.styles || {}) }\n };\n\n const overrides = bindings.overrides ?? {};\n\n let upTo = this.breakpoints.indexOf(breakpoint);\n if (upTo === -1) {\n upTo = 0;\n }\n\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 result.inputs[key] = {\n ...(result.inputs![key] || {}),\n ...override.inputs[key]\n };\n }\n }\n\n if (override.styles) {\n for (const styleKey in override.styles) {\n const key = styleKey as keyof CssProperties;\n // @ts-expect-error It's hard to make CSS properties happy.\n result.styles[key] = {\n ...(result.styles[key] || {}),\n ...override.styles[key]\n };\n }\n }\n }\n\n return result;\n }\n}\n"],"mappings":"AAOA,OAAO,MAAMA,iBAAiB,CAAC;EAG3BC,WAAWA,CAACC,WAAqB,EAAE;IAC/B,IAAI,CAACA,WAAW,GAAGA,WAAW;EAClC;EAEOC,WAAWA,CAACC,QAAiC,EAAEC,UAAkB,EAAE;IACtE,MAAMC,MAAiD,GAAG;MACtDC,OAAO,EAAEH,QAAQ,CAACG,OAAO;MACzBC,MAAM,EAAE;QAAE,IAAIJ,QAAQ,CAACI,MAAM,IAAI,CAAC,CAAC;MAAE,CAAC;MACtCC,MAAM,EAAE;QAAE,IAAIL,QAAQ,CAACK,MAAM,IAAI,CAAC,CAAC;MAAE;IACzC,CAAC;IAED,MAAMC,SAAS,GAAGN,QAAQ,CAACM,SAAS,IAAI,CAAC,CAAC;IAE1C,IAAIC,IAAI,GAAG,IAAI,CAACT,WAAW,CAACU,OAAO,CAACP,UAAU,CAAC;IAC/C,IAAIM,IAAI,KAAK,CAAC,CAAC,EAAE;MACbA,IAAI,GAAG,CAAC;IACZ;IAEA,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIF,IAAI,EAAEE,CAAC,EAAE,EAAE;MAC5B,MAAMC,EAAE,GAAG,IAAI,CAACZ,WAAW,CAACW,CAAC,CAAC;MAC9B,MAAME,QAAQ,GAAGL,SAAS,CAACI,EAAE,CAAC;MAC9B,IAAI,CAACC,QAAQ,EAAE;QACX;MACJ;MAEA,IAAIA,QAAQ,CAACP,MAAM,EAAE;QACjB,KAAK,MAAMQ,GAAG,IAAID,QAAQ,CAACP,MAAM,EAAE;UAC/BF,MAAM,CAACE,MAAM,CAACQ,GAAG,CAAC,GAAG;YACjB,IAAIV,MAAM,CAACE,MAAM,CAAEQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9B,GAAGD,QAAQ,CAACP,MAAM,CAACQ,GAAG;UAC1B,CAAC;QACL;MACJ;MAEA,IAAID,QAAQ,CAACN,MAAM,EAAE;QACjB,KAAK,MAAMQ,QAAQ,IAAIF,QAAQ,CAACN,MAAM,EAAE;UACpC,MAAMO,GAAG,GAAGC,QAA+B;UAC3C;UACAX,MAAM,CAACG,MAAM,CAACO,GAAG,CAAC,GAAG;YACjB,IAAIV,MAAM,CAACG,MAAM,CAACO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7B,GAAGD,QAAQ,CAACN,MAAM,CAACO,GAAG;UAC1B,CAAC;QACL;MACJ;IACJ;IAEA,OAAOV,MAAM;EACjB;AACJ","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["BindingsProcessor","constructor","breakpoints","getBindings","bindings","breakpoint","result","$repeat","inputs","styles","overrides","upTo","indexOf","i","bp","override","key","styleKey"],"sources":["BindingsProcessor.ts"],"sourcesContent":["import type { DocumentElementBindings, CssProperties } from \"~/types.js\";\n\ntype RequiredBindings<T extends DocumentElementBindings> = T & {\n inputs: NonNullable<T[\"inputs\"]>;\n styles: NonNullable<T[\"styles\"]>;\n};\n\nexport class BindingsProcessor {\n private readonly breakpoints: string[];\n\n constructor(breakpoints: string[]) {\n this.breakpoints = breakpoints;\n }\n\n public getBindings(bindings: DocumentElementBindings, breakpoint: string) {\n const result: RequiredBindings<DocumentElementBindings> = {\n $repeat: bindings.$repeat,\n inputs: { ...(bindings.inputs || {}) },\n styles: { ...(bindings.styles || {}) }\n };\n\n const overrides = bindings.overrides ?? {};\n\n let upTo = this.breakpoints.indexOf(breakpoint);\n if (upTo === -1) {\n upTo = 0;\n }\n\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 result.inputs[key] = {\n ...(result.inputs![key] || {}),\n ...override.inputs[key]\n };\n }\n }\n\n if (override.styles) {\n for (const styleKey in override.styles) {\n const key = styleKey as keyof CssProperties;\n // @ts-expect-error It's hard to make CSS properties happy.\n result.styles[key] = {\n ...(result.styles[key] || {}),\n ...override.styles[key]\n };\n }\n }\n }\n\n return result;\n }\n}\n"],"mappings":"AAOA,OAAO,MAAMA,iBAAiB,CAAC;EAG3BC,WAAWA,CAACC,WAAqB,EAAE;IAC/B,IAAI,CAACA,WAAW,GAAGA,WAAW;EAClC;EAEOC,WAAWA,CAACC,QAAiC,EAAEC,UAAkB,EAAE;IACtE,MAAMC,MAAiD,GAAG;MACtDC,OAAO,EAAEH,QAAQ,CAACG,OAAO;MACzBC,MAAM,EAAE;QAAE,IAAIJ,QAAQ,CAACI,MAAM,IAAI,CAAC,CAAC;MAAE,CAAC;MACtCC,MAAM,EAAE;QAAE,IAAIL,QAAQ,CAACK,MAAM,IAAI,CAAC,CAAC;MAAE;IACzC,CAAC;IAED,MAAMC,SAAS,GAAGN,QAAQ,CAACM,SAAS,IAAI,CAAC,CAAC;IAE1C,IAAIC,IAAI,GAAG,IAAI,CAACT,WAAW,CAACU,OAAO,CAACP,UAAU,CAAC;IAC/C,IAAIM,IAAI,KAAK,CAAC,CAAC,EAAE;MACbA,IAAI,GAAG,CAAC;IACZ;IAEA,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIF,IAAI,EAAEE,CAAC,EAAE,EAAE;MAC5B,MAAMC,EAAE,GAAG,IAAI,CAACZ,WAAW,CAACW,CAAC,CAAC;MAC9B,MAAME,QAAQ,GAAGL,SAAS,CAACI,EAAE,CAAC;MAC9B,IAAI,CAACC,QAAQ,EAAE;QACX;MACJ;MAEA,IAAIA,QAAQ,CAACP,MAAM,EAAE;QACjB,KAAK,MAAMQ,GAAG,IAAID,QAAQ,CAACP,MAAM,EAAE;UAC/BF,MAAM,CAACE,MAAM,CAACQ,GAAG,CAAC,GAAG;YACjB,IAAIV,MAAM,CAACE,MAAM,CAAEQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9B,GAAGD,QAAQ,CAACP,MAAM,CAACQ,GAAG;UAC1B,CAAC;QACL;MACJ;MAEA,IAAID,QAAQ,CAACN,MAAM,EAAE;QACjB,KAAK,MAAMQ,QAAQ,IAAIF,QAAQ,CAACN,MAAM,EAAE;UACpC,MAAMO,GAAG,GAAGC,QAA+B;UAC3C;UACAX,MAAM,CAACG,MAAM,CAACO,GAAG,CAAC,GAAG;YACjB,IAAIV,MAAM,CAACG,MAAM,CAACO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7B,GAAGD,QAAQ,CAACN,MAAM,CAACO,GAAG;UAC1B,CAAC;QACL;MACJ;IACJ;IAEA,OAAOV,MAAM;EACjB;AACJ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BindingsProcessor","describe","breakpoints","processor","bindings","inputs","title","id","static","type","count","expression","styles","paddingTop","backgroundColor","overrides","tablet","mobile","it","result","getBindings","expect","toEqual","toBe"],"sources":["BindingsProcessor.test.ts"],"sourcesContent":["import { BindingsProcessor } from \"./BindingsProcessor\";\nimport type { DocumentElementBindings } from \"~/types\";\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":[]}
|
|
1
|
+
{"version":3,"names":["BindingsProcessor","describe","breakpoints","processor","bindings","inputs","title","id","static","type","count","expression","styles","paddingTop","backgroundColor","overrides","tablet","mobile","it","result","getBindings","expect","toEqual","toBe"],"sources":["BindingsProcessor.test.ts"],"sourcesContent":["import { 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":"AAAA,SAASA,iBAAiB;AAG1BC,QAAQ,CAAC,mBAAmB,EAAE,MAAM;EAChC,MAAMC,WAAW,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;EACnD,MAAMC,SAAS,GAAG,IAAIH,iBAAiB,CAACE,WAAW,CAAC;EAEpD,MAAME,QAAiC,GAAG;IACtCC,MAAM,EAAE;MACJC,KAAK,EAAE;QAAEC,EAAE,EAAE,OAAO;QAAEC,MAAM,EAAE,OAAO;QAAEC,IAAI,EAAE;MAAO,CAAC;MACrDC,KAAK,EAAE;QAAEH,EAAE,EAAE,OAAO;QAAEC,MAAM,EAAE,CAAC;QAAEC,IAAI,EAAE,QAAQ;QAAEE,UAAU,EAAE;MAAe;IAChF,CAAC;IACDC,MAAM,EAAE;MACJC,UAAU,EAAE;QAAEL,MAAM,EAAE;MAAO,CAAC;MAC9BM,eAAe,EAAE;QAAEN,MAAM,EAAE;MAAQ;IACvC,CAAC;IACDO,SAAS,EAAE;MACPC,MAAM,EAAE;QACJX,MAAM,EAAE;UACJC,KAAK,EAAE;YAAEC,EAAE,EAAE,OAAO;YAAEC,MAAM,EAAE,cAAc;YAAEC,IAAI,EAAE;UAAO;QAC/D,CAAC;QACDG,MAAM,EAAE;UACJE,eAAe,EAAE;YAAEN,MAAM,EAAE;UAAO;QACtC;MACJ,CAAC;MACDS,MAAM,EAAE;QACJZ,MAAM,EAAE;UACJK,KAAK,EAAE;YAAEH,EAAE,EAAE,OAAO;YAAEC,MAAM,EAAE,CAAC;YAAEC,IAAI,EAAE;UAAS;QACpD,CAAC;QACDG,MAAM,EAAE;UACJC,UAAU,EAAE;YAAEL,MAAM,EAAE;UAAM;QAChC;MACJ;IACJ;EACJ,CAAC;EAEDU,EAAE,CAAC,qEAAqE,EAAE,MAAM;IAC5E,MAAMC,MAAM,GAAGhB,SAAS,CAACiB,WAAW,CAAChB,QAAQ,EAAE,SAAS,CAAC;IACzDiB,MAAM,CAACF,MAAM,CAACd,MAAM,CAAC,CAACiB,OAAO,CAAClB,QAAQ,CAACC,MAAM,CAAC;IAC9CgB,MAAM,CAACF,MAAM,CAACP,MAAM,CAAC,CAACU,OAAO,CAAClB,QAAQ,CAACQ,MAAM,CAAC;EAClD,CAAC,CAAC;EAEFM,EAAE,CAAC,+BAA+B,EAAE,MAAM;IACtC,MAAMC,MAAM,GAAGhB,SAAS,CAACiB,WAAW,CAAChB,QAAQ,EAAE,QAAQ,CAAC;IACxDiB,MAAM,CAACF,MAAM,CAACd,MAAM,EAAEC,KAAK,CAACE,MAAM,CAAC,CAACe,IAAI,CAAC,cAAc,CAAC;IACxDF,MAAM,CAACF,MAAM,CAACd,MAAM,EAAEK,KAAK,CAACF,MAAM,CAAC,CAACe,IAAI,CAAC,CAAC,CAAC;IAC3CF,MAAM,CAACF,MAAM,CAACd,MAAM,EAAEK,KAAK,CAACC,UAAU,CAAC,CAACY,IAAI,CAAC,cAAc,CAAC;IAC5DF,MAAM,CAACF,MAAM,CAACP,MAAM,EAAEE,eAAe,EAAEN,MAAM,CAAC,CAACe,IAAI,CAAC,MAAM,CAAC;IAC3DF,MAAM,CAACF,MAAM,CAACP,MAAM,EAAEC,UAAU,EAAEL,MAAM,CAAC,CAACe,IAAI,CAAC,MAAM,CAAC;EAC1D,CAAC,CAAC;EAEFL,EAAE,CAAC,0CAA0C,EAAE,MAAM;IACjD,MAAMC,MAAM,GAAGhB,SAAS,CAACiB,WAAW,CAAChB,QAAQ,EAAE,QAAQ,CAAC;IACxDiB,MAAM,CAACF,MAAM,CAACd,MAAM,EAAEC,KAAK,CAACE,MAAM,CAAC,CAACe,IAAI,CAAC,cAAc,CAAC;IACxDF,MAAM,CAACF,MAAM,CAACd,MAAM,EAAEK,KAAK,CAACF,MAAM,CAAC,CAACe,IAAI,CAAC,CAAC,CAAC;IAC3CF,MAAM,CAACF,MAAM,CAACd,MAAM,EAAEK,KAAK,CAACC,UAAU,CAAC,CAACY,IAAI,CAAC,cAAc,CAAC;IAC5DF,MAAM,CAACF,MAAM,CAACP,MAAM,EAAEE,eAAe,EAAEN,MAAM,CAAC,CAACe,IAAI,CAAC,MAAM,CAAC;IAC3DF,MAAM,CAACF,MAAM,CAACP,MAAM,EAAEC,UAAU,EAAEL,MAAM,CAAC,CAACe,IAAI,CAAC,KAAK,CAAC;EACzD,CAAC,CAAC;EAEFL,EAAE,CAAC,mCAAmC,EAAE,MAAM;IAC1C,MAAMC,MAAM,GAAGhB,SAAS,CAACiB,WAAW,CAAChB,QAAQ,EAAE,SAAS,CAAC;IACzDiB,MAAM,CAACF,MAAM,CAACd,MAAM,CAAC,CAACiB,OAAO,CAAClB,QAAQ,CAACC,MAAM,CAAC;IAC9CgB,MAAM,CAACF,MAAM,CAACP,MAAM,CAAC,CAACU,OAAO,CAAClB,QAAQ,CAACQ,MAAM,CAAC;EAClD,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
|
package/BindingsResolver.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { DocumentElement, DocumentState, ResolvedElement, ComponentInput, DocumentElementBindings } from "./types";
|
|
2
|
-
import type { InputAstNode } from "./ComponentManifestToAstConverter";
|
|
1
|
+
import type { DocumentElement, DocumentState, ResolvedElement, ComponentInput, DocumentElementBindings } from "./types.js";
|
|
2
|
+
import type { InputAstNode } from "./ComponentManifestToAstConverter.js";
|
|
3
3
|
export interface OnResolved {
|
|
4
4
|
(value: any, input: ComponentInput): any;
|
|
5
5
|
}
|
package/BindingsResolver.js
CHANGED
|
@@ -102,13 +102,13 @@ export class BindingsResolver {
|
|
|
102
102
|
return Array.from(new Set(indexes)).sort((a, b) => a - b);
|
|
103
103
|
}
|
|
104
104
|
resolveBinding(binding, context) {
|
|
105
|
-
if (
|
|
105
|
+
if (typeof binding === "undefined") {
|
|
106
106
|
return undefined;
|
|
107
107
|
}
|
|
108
108
|
if (binding.expression) {
|
|
109
109
|
return this.evaluateExpression(binding.expression, context);
|
|
110
110
|
}
|
|
111
|
-
if (binding.static) {
|
|
111
|
+
if (typeof binding.static !== "undefined") {
|
|
112
112
|
return binding.static;
|
|
113
113
|
}
|
|
114
114
|
return undefined;
|
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\";\nimport type { InputAstNode } from \"./ComponentManifestToAstConverter\";\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 (!binding) {\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 (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","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":[]}
|
package/BindingsResolver.test.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BindingsResolver } from "./BindingsResolver";
|
|
2
|
-
import { createSlotInput, createTextInput } from "./createInput";
|
|
3
|
-
import { ComponentManifestToAstConverter } from "./ComponentManifestToAstConverter";
|
|
1
|
+
import { BindingsResolver } from "./BindingsResolver.js";
|
|
2
|
+
import { createSlotInput, createTextInput } from "./createInput.js";
|
|
3
|
+
import { ComponentManifestToAstConverter } from "./ComponentManifestToAstConverter.js";
|
|
4
4
|
describe("BindingsResolver", () => {
|
|
5
5
|
const baseElement = {
|
|
6
6
|
id: "test1",
|
|
@@ -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\";\nimport type {\n DocumentElement,\n DocumentState,\n DocumentElementBindings,\n DocumentBindings\n} from \"~/types\";\nimport { createSlotInput, createTextInput } from \"~/createInput\";\nimport { ComponentManifestToAstConverter } from \"~/ComponentManifestToAstConverter\";\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":["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 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ComponentInputTraverser","constructor","ast","traverse","data","visitor","node","rootValue","name","traverseNode","value","currentPath","list","length","forEach","item","index","children","itemPath","child","childValue","childPath"],"sources":["ComponentInputTraverser.ts"],"sourcesContent":["import type { InputAstNode } from \"./ComponentManifestToAstConverter\";\n\n// Visitor signature: called for every resolved leaf\nexport type InputVisitor = (node: InputAstNode, path: string, value: any) => void;\n\n/**\n * ComponentInputTraverser\n *\n * Walks an input AST and a matching data object,\n * invoking `visitor` for each leaf value found.\n */\nexport class ComponentInputTraverser {\n private readonly ast: InputAstNode[];\n\n constructor(ast: InputAstNode[]) {\n this.ast = ast;\n }\n\n /**\n * Traverse the given `data` object according to the AST,\n * calling `visitor(node, path, value)` for each leaf.\n */\n public traverse(data: Record<string, any>, visitor: InputVisitor): void {\n for (const node of this.ast) {\n const rootValue = data[node.name];\n this.traverseNode(node, rootValue, node.name, visitor);\n }\n }\n\n private traverseNode(\n node: InputAstNode,\n value: any,\n currentPath: string,\n visitor: InputVisitor\n ): void {\n if (node.list) {\n value = value ?? [];\n\n if (value.length === 0) {\n visitor(node, currentPath, value);\n }\n\n value.forEach((item: any, index: number) => {\n if (node.children.length > 0) {\n const itemPath = `${currentPath}/${index}`;\n for (const child of node.children) {\n const childValue = item?.[child.name];\n const childPath = `${itemPath}/${child.name}`;\n this.traverseNode(child, childValue, childPath, visitor);\n }\n } else {\n visitor(node, currentPath, item);\n }\n });\n } else {\n if (node.children.length > 0) {\n for (const child of node.children) {\n const childValue = value?.[child.name];\n const childPath = `${currentPath}/${child.name}`;\n this.traverseNode(child, childValue, childPath, visitor);\n }\n } else {\n visitor(node, currentPath, value);\n }\n }\n }\n}\n"],"mappings":"AAEA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,uBAAuB,CAAC;EAGjCC,WAAWA,CAACC,GAAmB,EAAE;IAC7B,IAAI,CAACA,GAAG,GAAGA,GAAG;EAClB;;EAEA;AACJ;AACA;AACA;EACWC,QAAQA,CAACC,IAAyB,EAAEC,OAAqB,EAAQ;IACpE,KAAK,MAAMC,IAAI,IAAI,IAAI,CAACJ,GAAG,EAAE;MACzB,MAAMK,SAAS,GAAGH,IAAI,CAACE,IAAI,CAACE,IAAI,CAAC;MACjC,IAAI,CAACC,YAAY,CAACH,IAAI,EAAEC,SAAS,EAAED,IAAI,CAACE,IAAI,EAAEH,OAAO,CAAC;IAC1D;EACJ;EAEQI,YAAYA,CAChBH,IAAkB,EAClBI,KAAU,EACVC,WAAmB,EACnBN,OAAqB,EACjB;IACJ,IAAIC,IAAI,CAACM,IAAI,EAAE;MACXF,KAAK,GAAGA,KAAK,IAAI,EAAE;MAEnB,IAAIA,KAAK,CAACG,MAAM,KAAK,CAAC,EAAE;QACpBR,OAAO,CAACC,IAAI,EAAEK,WAAW,EAAED,KAAK,CAAC;MACrC;MAEAA,KAAK,CAACI,OAAO,CAAC,CAACC,IAAS,EAAEC,KAAa,KAAK;QACxC,IAAIV,IAAI,CAACW,QAAQ,CAACJ,MAAM,GAAG,CAAC,EAAE;UAC1B,MAAMK,QAAQ,GAAG,GAAGP,WAAW,IAAIK,KAAK,EAAE;UAC1C,KAAK,MAAMG,KAAK,IAAIb,IAAI,CAACW,QAAQ,EAAE;YAC/B,MAAMG,UAAU,GAAGL,IAAI,GAAGI,KAAK,CAACX,IAAI,CAAC;YACrC,MAAMa,SAAS,GAAG,GAAGH,QAAQ,IAAIC,KAAK,CAACX,IAAI,EAAE;YAC7C,IAAI,CAACC,YAAY,CAACU,KAAK,EAAEC,UAAU,EAAEC,SAAS,EAAEhB,OAAO,CAAC;UAC5D;QACJ,CAAC,MAAM;UACHA,OAAO,CAACC,IAAI,EAAEK,WAAW,EAAEI,IAAI,CAAC;QACpC;MACJ,CAAC,CAAC;IACN,CAAC,MAAM;MACH,IAAIT,IAAI,CAACW,QAAQ,CAACJ,MAAM,GAAG,CAAC,EAAE;QAC1B,KAAK,MAAMM,KAAK,IAAIb,IAAI,CAACW,QAAQ,EAAE;UAC/B,MAAMG,UAAU,GAAGV,KAAK,GAAGS,KAAK,CAACX,IAAI,CAAC;UACtC,MAAMa,SAAS,GAAG,GAAGV,WAAW,IAAIQ,KAAK,CAACX,IAAI,EAAE;UAChD,IAAI,CAACC,YAAY,CAACU,KAAK,EAAEC,UAAU,EAAEC,SAAS,EAAEhB,OAAO,CAAC;QAC5D;MACJ,CAAC,MAAM;QACHA,OAAO,CAACC,IAAI,EAAEK,WAAW,EAAED,KAAK,CAAC;MACrC;IACJ;EACJ;AACJ","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["ComponentInputTraverser","constructor","ast","traverse","data","visitor","node","rootValue","name","traverseNode","value","currentPath","list","length","forEach","item","index","children","itemPath","child","childValue","childPath"],"sources":["ComponentInputTraverser.ts"],"sourcesContent":["import type { InputAstNode } from \"./ComponentManifestToAstConverter.js\";\n\n// Visitor signature: called for every resolved leaf\nexport type InputVisitor = (node: InputAstNode, path: string, value: any) => void;\n\n/**\n * ComponentInputTraverser\n *\n * Walks an input AST and a matching data object,\n * invoking `visitor` for each leaf value found.\n */\nexport class ComponentInputTraverser {\n private readonly ast: InputAstNode[];\n\n constructor(ast: InputAstNode[]) {\n this.ast = ast;\n }\n\n /**\n * Traverse the given `data` object according to the AST,\n * calling `visitor(node, path, value)` for each leaf.\n */\n public traverse(data: Record<string, any>, visitor: InputVisitor): void {\n for (const node of this.ast) {\n const rootValue = data[node.name];\n this.traverseNode(node, rootValue, node.name, visitor);\n }\n }\n\n private traverseNode(\n node: InputAstNode,\n value: any,\n currentPath: string,\n visitor: InputVisitor\n ): void {\n if (node.list) {\n value = value ?? [];\n\n if (value.length === 0) {\n visitor(node, currentPath, value);\n }\n\n value.forEach((item: any, index: number) => {\n if (node.children.length > 0) {\n const itemPath = `${currentPath}/${index}`;\n for (const child of node.children) {\n const childValue = item?.[child.name];\n const childPath = `${itemPath}/${child.name}`;\n this.traverseNode(child, childValue, childPath, visitor);\n }\n } else {\n visitor(node, currentPath, item);\n }\n });\n } else {\n if (node.children.length > 0) {\n for (const child of node.children) {\n const childValue = value?.[child.name];\n const childPath = `${currentPath}/${child.name}`;\n this.traverseNode(child, childValue, childPath, visitor);\n }\n } else {\n visitor(node, currentPath, value);\n }\n }\n }\n}\n"],"mappings":"AAEA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,uBAAuB,CAAC;EAGjCC,WAAWA,CAACC,GAAmB,EAAE;IAC7B,IAAI,CAACA,GAAG,GAAGA,GAAG;EAClB;;EAEA;AACJ;AACA;AACA;EACWC,QAAQA,CAACC,IAAyB,EAAEC,OAAqB,EAAQ;IACpE,KAAK,MAAMC,IAAI,IAAI,IAAI,CAACJ,GAAG,EAAE;MACzB,MAAMK,SAAS,GAAGH,IAAI,CAACE,IAAI,CAACE,IAAI,CAAC;MACjC,IAAI,CAACC,YAAY,CAACH,IAAI,EAAEC,SAAS,EAAED,IAAI,CAACE,IAAI,EAAEH,OAAO,CAAC;IAC1D;EACJ;EAEQI,YAAYA,CAChBH,IAAkB,EAClBI,KAAU,EACVC,WAAmB,EACnBN,OAAqB,EACjB;IACJ,IAAIC,IAAI,CAACM,IAAI,EAAE;MACXF,KAAK,GAAGA,KAAK,IAAI,EAAE;MAEnB,IAAIA,KAAK,CAACG,MAAM,KAAK,CAAC,EAAE;QACpBR,OAAO,CAACC,IAAI,EAAEK,WAAW,EAAED,KAAK,CAAC;MACrC;MAEAA,KAAK,CAACI,OAAO,CAAC,CAACC,IAAS,EAAEC,KAAa,KAAK;QACxC,IAAIV,IAAI,CAACW,QAAQ,CAACJ,MAAM,GAAG,CAAC,EAAE;UAC1B,MAAMK,QAAQ,GAAG,GAAGP,WAAW,IAAIK,KAAK,EAAE;UAC1C,KAAK,MAAMG,KAAK,IAAIb,IAAI,CAACW,QAAQ,EAAE;YAC/B,MAAMG,UAAU,GAAGL,IAAI,GAAGI,KAAK,CAACX,IAAI,CAAC;YACrC,MAAMa,SAAS,GAAG,GAAGH,QAAQ,IAAIC,KAAK,CAACX,IAAI,EAAE;YAC7C,IAAI,CAACC,YAAY,CAACU,KAAK,EAAEC,UAAU,EAAEC,SAAS,EAAEhB,OAAO,CAAC;UAC5D;QACJ,CAAC,MAAM;UACHA,OAAO,CAACC,IAAI,EAAEK,WAAW,EAAEI,IAAI,CAAC;QACpC;MACJ,CAAC,CAAC;IACN,CAAC,MAAM;MACH,IAAIT,IAAI,CAACW,QAAQ,CAACJ,MAAM,GAAG,CAAC,EAAE;QAC1B,KAAK,MAAMM,KAAK,IAAIb,IAAI,CAACW,QAAQ,EAAE;UAC/B,MAAMG,UAAU,GAAGV,KAAK,GAAGS,KAAK,CAACX,IAAI,CAAC;UACtC,MAAMa,SAAS,GAAG,GAAGV,WAAW,IAAIQ,KAAK,CAACX,IAAI,EAAE;UAChD,IAAI,CAACC,YAAY,CAACU,KAAK,EAAEC,UAAU,EAAEC,SAAS,EAAEhB,OAAO,CAAC;QAC5D;MACJ,CAAC,MAAM;QACHA,OAAO,CAACC,IAAI,EAAEK,WAAW,EAAED,KAAK,CAAC;MACrC;IACJ;EACJ;AACJ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ComponentManifestToAstConverter","convert","inputs","buildAst","basePath","map","input","path","name","node","type","list","children","fields"],"sources":["ComponentManifestToAstConverter.ts"],"sourcesContent":["import type { ComponentInput } from \"./types\";\n\nexport type InputAstNode = {\n name: string;\n type: string;\n list: boolean;\n path: string;\n children: InputAstNode[];\n input: ComponentInput;\n};\n\nexport class ComponentManifestToAstConverter {\n static convert(inputs: ComponentInput[]): InputAstNode[] {\n return this.buildAst(inputs);\n }\n\n private static buildAst(inputs: ComponentInput[], basePath = \"\"): InputAstNode[] {\n return inputs.map(input => {\n const path = basePath ? `${basePath}/${input.name}` : input.name;\n const node: InputAstNode = {\n name: input.name,\n type: input.type,\n list: input.list || false,\n path,\n children: [],\n input\n };\n\n if (input.type === \"object\" && input.fields) {\n node.children = this.buildAst(input.fields, path);\n }\n\n return node;\n });\n }\n}\n"],"mappings":"AAWA,OAAO,MAAMA,+BAA+B,CAAC;EACzC,OAAOC,OAAOA,CAACC,MAAwB,EAAkB;IACrD,OAAO,IAAI,CAACC,QAAQ,CAACD,MAAM,CAAC;EAChC;EAEA,OAAeC,QAAQA,CAACD,MAAwB,EAAEE,QAAQ,GAAG,EAAE,EAAkB;IAC7E,OAAOF,MAAM,CAACG,GAAG,CAACC,KAAK,IAAI;MACvB,MAAMC,IAAI,GAAGH,QAAQ,GAAG,GAAGA,QAAQ,IAAIE,KAAK,CAACE,IAAI,EAAE,GAAGF,KAAK,CAACE,IAAI;MAChE,MAAMC,IAAkB,GAAG;QACvBD,IAAI,EAAEF,KAAK,CAACE,IAAI;QAChBE,IAAI,EAAEJ,KAAK,CAACI,IAAI;QAChBC,IAAI,EAAEL,KAAK,CAACK,IAAI,IAAI,KAAK;QACzBJ,IAAI;QACJK,QAAQ,EAAE,EAAE;QACZN;MACJ,CAAC;MAED,IAAIA,KAAK,CAACI,IAAI,KAAK,QAAQ,IAAIJ,KAAK,CAACO,MAAM,EAAE;QACzCJ,IAAI,CAACG,QAAQ,GAAG,IAAI,CAACT,QAAQ,CAACG,KAAK,CAACO,MAAM,EAAEN,IAAI,CAAC;MACrD;MAEA,OAAOE,IAAI;IACf,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["ComponentManifestToAstConverter","convert","inputs","buildAst","basePath","map","input","path","name","node","type","list","children","fields"],"sources":["ComponentManifestToAstConverter.ts"],"sourcesContent":["import type { ComponentInput } from \"./types.js\";\n\nexport type InputAstNode = {\n name: string;\n type: string;\n list: boolean;\n path: string;\n children: InputAstNode[];\n input: ComponentInput;\n};\n\nexport class ComponentManifestToAstConverter {\n static convert(inputs: ComponentInput[]): InputAstNode[] {\n return this.buildAst(inputs);\n }\n\n private static buildAst(inputs: ComponentInput[], basePath = \"\"): InputAstNode[] {\n return inputs.map(input => {\n const path = basePath ? `${basePath}/${input.name}` : input.name;\n const node: InputAstNode = {\n name: input.name,\n type: input.type,\n list: input.list || false,\n path,\n children: [],\n input\n };\n\n if (input.type === \"object\" && input.fields) {\n node.children = this.buildAst(input.fields, path);\n }\n\n return node;\n });\n }\n}\n"],"mappings":"AAWA,OAAO,MAAMA,+BAA+B,CAAC;EACzC,OAAOC,OAAOA,CAACC,MAAwB,EAAkB;IACrD,OAAO,IAAI,CAACC,QAAQ,CAACD,MAAM,CAAC;EAChC;EAEA,OAAeC,QAAQA,CAACD,MAAwB,EAAEE,QAAQ,GAAG,EAAE,EAAkB;IAC7E,OAAOF,MAAM,CAACG,GAAG,CAACC,KAAK,IAAI;MACvB,MAAMC,IAAI,GAAGH,QAAQ,GAAG,GAAGA,QAAQ,IAAIE,KAAK,CAACE,IAAI,EAAE,GAAGF,KAAK,CAACE,IAAI;MAChE,MAAMC,IAAkB,GAAG;QACvBD,IAAI,EAAEF,KAAK,CAACE,IAAI;QAChBE,IAAI,EAAEJ,KAAK,CAACI,IAAI;QAChBC,IAAI,EAAEL,KAAK,CAACK,IAAI,IAAI,KAAK;QACzBJ,IAAI;QACJK,QAAQ,EAAE,EAAE;QACZN;MACJ,CAAC;MAED,IAAIA,KAAK,CAACI,IAAI,KAAK,QAAQ,IAAIJ,KAAK,CAACO,MAAM,EAAE;QACzCJ,IAAI,CAACG,QAAQ,GAAG,IAAI,CAACT,QAAQ,CAACG,KAAK,CAACO,MAAM,EAAEN,IAAI,CAAC;MACrD;MAEA,OAAOE,IAAI;IACf,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
|
package/ComponentResolver.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ComponentRegistry } from "./ComponentRegistry.js";
|
|
2
|
-
import type { DocumentElement, DocumentElementBindings, DocumentState, ResolvedComponent } from "./types";
|
|
3
|
-
import type { OnResolved } from "./BindingsResolver";
|
|
2
|
+
import type { DocumentElement, DocumentElementBindings, DocumentState, ResolvedComponent } from "./types.js";
|
|
3
|
+
import type { OnResolved } from "./BindingsResolver.js";
|
|
4
4
|
export type ResolveElementParams = {
|
|
5
5
|
element: DocumentElement;
|
|
6
6
|
elementBindings: DocumentElementBindings;
|
package/ComponentResolver.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { logger } from "./Logger";
|
|
2
|
-
import { BindingsResolver } from "./BindingsResolver";
|
|
3
|
-
import { ComponentManifestToAstConverter } from "./ComponentManifestToAstConverter";
|
|
1
|
+
import { logger } from "./Logger.js";
|
|
2
|
+
import { BindingsResolver } from "./BindingsResolver.js";
|
|
3
|
+
import { ComponentManifestToAstConverter } from "./ComponentManifestToAstConverter.js";
|
|
4
4
|
export class ComponentResolver {
|
|
5
5
|
constructor(registry) {
|
|
6
6
|
this.components = registry;
|
package/ComponentResolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["logger","BindingsResolver","ComponentManifestToAstConverter","ComponentResolver","constructor","registry","components","resolve","element","elementBindings","onResolved","state","componentName","component","name","blueprint","get","warn","bindingsResolver","instances","resolveElement","inputAst","convert","manifest","inputs","map","instance","styles"],"sources":["ComponentResolver.ts"],"sourcesContent":["import type { ComponentRegistry } from \"~/ComponentRegistry.js\";\nimport type {\n DocumentElement,\n DocumentElementBindings,\n DocumentState,\n ResolvedComponent\n} from \"~/types\";\nimport { logger } from \"./Logger\";\nimport type { OnResolved } from \"./BindingsResolver\";\nimport { BindingsResolver } from \"./BindingsResolver\";\nimport { ComponentManifestToAstConverter } from \"~/ComponentManifestToAstConverter\";\n\nexport type ResolveElementParams = {\n element: DocumentElement;\n elementBindings: DocumentElementBindings;\n state: DocumentState;\n onResolved?: OnResolved;\n};\n\nexport class ComponentResolver {\n private components: ComponentRegistry;\n\n constructor(registry: ComponentRegistry) {\n this.components = registry;\n }\n\n resolve({\n element,\n elementBindings = {},\n onResolved,\n state\n }: ResolveElementParams): ResolvedComponent[] | null {\n const componentName = element.component.name;\n const blueprint = this.components.get(componentName);\n\n if (!blueprint) {\n logger.warn(`Unknown component: ${componentName}`);\n return null;\n }\n\n const bindingsResolver = new BindingsResolver(state);\n const instances = bindingsResolver.resolveElement({\n element,\n elementBindings,\n inputAst: ComponentManifestToAstConverter.convert(blueprint.manifest.inputs ?? []),\n onResolved\n });\n\n return instances.map(instance => ({\n component: blueprint.component,\n manifest: blueprint.manifest!,\n styles: instance.styles,\n inputs: instance.inputs\n }));\n }\n}\n"],"mappings":"AAOA,SAASA,MAAM;AAEf,SAASC,gBAAgB;AACzB,SAASC,+BAA+B;AASxC,OAAO,MAAMC,iBAAiB,CAAC;EAG3BC,WAAWA,CAACC,QAA2B,EAAE;IACrC,IAAI,CAACC,UAAU,GAAGD,QAAQ;EAC9B;EAEAE,OAAOA,CAAC;IACJC,OAAO;IACPC,eAAe,GAAG,CAAC,CAAC;IACpBC,UAAU;IACVC;EACkB,CAAC,EAA8B;IACjD,MAAMC,aAAa,GAAGJ,OAAO,CAACK,SAAS,CAACC,IAAI;IAC5C,MAAMC,SAAS,GAAG,IAAI,CAACT,UAAU,CAACU,GAAG,CAACJ,aAAa,CAAC;IAEpD,IAAI,CAACG,SAAS,EAAE;MACZf,MAAM,CAACiB,IAAI,CAAC,sBAAsBL,aAAa,EAAE,CAAC;MAClD,OAAO,IAAI;IACf;IAEA,MAAMM,gBAAgB,GAAG,IAAIjB,gBAAgB,CAACU,KAAK,CAAC;IACpD,MAAMQ,SAAS,GAAGD,gBAAgB,CAACE,cAAc,CAAC;MAC9CZ,OAAO;MACPC,eAAe;MACfY,QAAQ,EAAEnB,+BAA+B,CAACoB,OAAO,CAACP,SAAS,CAACQ,QAAQ,CAACC,MAAM,IAAI,EAAE,CAAC;MAClFd;IACJ,CAAC,CAAC;IAEF,OAAOS,SAAS,CAACM,GAAG,CAACC,QAAQ,KAAK;MAC9Bb,SAAS,EAAEE,SAAS,CAACF,SAAS;MAC9BU,QAAQ,EAAER,SAAS,CAACQ,QAAS;MAC7BI,MAAM,EAAED,QAAQ,CAACC,MAAM;MACvBH,MAAM,EAAEE,QAAQ,CAACF;IACrB,CAAC,CAAC,CAAC;EACP;AACJ","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["logger","BindingsResolver","ComponentManifestToAstConverter","ComponentResolver","constructor","registry","components","resolve","element","elementBindings","onResolved","state","componentName","component","name","blueprint","get","warn","bindingsResolver","instances","resolveElement","inputAst","convert","manifest","inputs","map","instance","styles"],"sources":["ComponentResolver.ts"],"sourcesContent":["import type { ComponentRegistry } from \"~/ComponentRegistry.js\";\nimport type {\n DocumentElement,\n DocumentElementBindings,\n DocumentState,\n ResolvedComponent\n} from \"~/types.js\";\nimport { logger } from \"./Logger.js\";\nimport type { OnResolved } from \"./BindingsResolver.js\";\nimport { BindingsResolver } from \"./BindingsResolver.js\";\nimport { ComponentManifestToAstConverter } from \"~/ComponentManifestToAstConverter.js\";\n\nexport type ResolveElementParams = {\n element: DocumentElement;\n elementBindings: DocumentElementBindings;\n state: DocumentState;\n onResolved?: OnResolved;\n};\n\nexport class ComponentResolver {\n private components: ComponentRegistry;\n\n constructor(registry: ComponentRegistry) {\n this.components = registry;\n }\n\n resolve({\n element,\n elementBindings = {},\n onResolved,\n state\n }: ResolveElementParams): ResolvedComponent[] | null {\n const componentName = element.component.name;\n const blueprint = this.components.get(componentName);\n\n if (!blueprint) {\n logger.warn(`Unknown component: ${componentName}`);\n return null;\n }\n\n const bindingsResolver = new BindingsResolver(state);\n const instances = bindingsResolver.resolveElement({\n element,\n elementBindings,\n inputAst: ComponentManifestToAstConverter.convert(blueprint.manifest.inputs ?? []),\n onResolved\n });\n\n return instances.map(instance => ({\n component: blueprint.component,\n manifest: blueprint.manifest!,\n styles: instance.styles,\n inputs: instance.inputs\n }));\n }\n}\n"],"mappings":"AAOA,SAASA,MAAM;AAEf,SAASC,gBAAgB;AACzB,SAASC,+BAA+B;AASxC,OAAO,MAAMC,iBAAiB,CAAC;EAG3BC,WAAWA,CAACC,QAA2B,EAAE;IACrC,IAAI,CAACC,UAAU,GAAGD,QAAQ;EAC9B;EAEAE,OAAOA,CAAC;IACJC,OAAO;IACPC,eAAe,GAAG,CAAC,CAAC;IACpBC,UAAU;IACVC;EACkB,CAAC,EAA8B;IACjD,MAAMC,aAAa,GAAGJ,OAAO,CAACK,SAAS,CAACC,IAAI;IAC5C,MAAMC,SAAS,GAAG,IAAI,CAACT,UAAU,CAACU,GAAG,CAACJ,aAAa,CAAC;IAEpD,IAAI,CAACG,SAAS,EAAE;MACZf,MAAM,CAACiB,IAAI,CAAC,sBAAsBL,aAAa,EAAE,CAAC;MAClD,OAAO,IAAI;IACf;IAEA,MAAMM,gBAAgB,GAAG,IAAIjB,gBAAgB,CAACU,KAAK,CAAC;IACpD,MAAMQ,SAAS,GAAGD,gBAAgB,CAACE,cAAc,CAAC;MAC9CZ,OAAO;MACPC,eAAe;MACfY,QAAQ,EAAEnB,+BAA+B,CAACoB,OAAO,CAACP,SAAS,CAACQ,QAAQ,CAACC,MAAM,IAAI,EAAE,CAAC;MAClFd;IACJ,CAAC,CAAC;IAEF,OAAOS,SAAS,CAACM,GAAG,CAACC,QAAQ,KAAK;MAC9Bb,SAAS,EAAEE,SAAS,CAACF,SAAS;MAC9BU,QAAQ,EAAER,SAAS,CAACQ,QAAS;MAC7BI,MAAM,EAAED,QAAQ,CAACC,MAAM;MACvBH,MAAM,EAAEE,QAAQ,CAACF;IACrB,CAAC,CAAC,CAAC;EACP;AACJ","ignoreList":[]}
|
package/ContentSdk.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { Component, IContentSdk, PublicPage, PublicRedirect, ResolvedComponent } from "./types";
|
|
1
|
+
import type { Component, IContentSdk, PublicPage, PublicRedirect, ResolvedComponent } from "./types.js";
|
|
2
2
|
import { LiveSdk } from "./LiveSdk.js";
|
|
3
3
|
import { EditingSdk } from "./EditingSdk.js";
|
|
4
|
-
import { type ResolveElementParams } from "./ComponentResolver";
|
|
4
|
+
import { type ResolveElementParams } from "./ComponentResolver.js";
|
|
5
5
|
import type { WebsiteBuilderThemeInput } from "./types/WebsiteBuilderTheme.js";
|
|
6
|
-
import type { IRedirects } from "./IRedirects";
|
|
6
|
+
import type { IRedirects } from "./IRedirects.js";
|
|
7
7
|
export type ApiConfig = {
|
|
8
8
|
apiKey: string;
|
|
9
9
|
apiHost: string;
|
package/ContentSdk.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { environment } from "./Environment.js";
|
|
2
2
|
import { LiveSdk } from "./LiveSdk.js";
|
|
3
3
|
import { EditingSdk } from "./EditingSdk.js";
|
|
4
|
-
import { ComponentResolver } from "./ComponentResolver";
|
|
4
|
+
import { ComponentResolver } from "./ComponentResolver.js";
|
|
5
5
|
import { PreviewSdk } from "./PreviewSdk.js";
|
|
6
|
-
import { componentRegistry } from "./ComponentRegistry";
|
|
7
|
-
import { ApiClient } from "./dataProviders/ApiClient";
|
|
8
|
-
import { DefaultDataProvider } from "./dataProviders/DefaultDataProvider";
|
|
6
|
+
import { componentRegistry } from "./ComponentRegistry.js";
|
|
7
|
+
import { ApiClient } from "./dataProviders/ApiClient.js";
|
|
8
|
+
import { DefaultDataProvider } from "./dataProviders/DefaultDataProvider.js";
|
|
9
9
|
import { Theme } from "./Theme.js";
|
|
10
10
|
import { viewportManager } from "./ViewportManager.js";
|
|
11
|
-
import { RedirectsProvider } from "./dataProviders/RedirectsProvider";
|
|
11
|
+
import { RedirectsProvider } from "./dataProviders/RedirectsProvider.js";
|
|
12
12
|
class InternalContentSdk {
|
|
13
13
|
constructor(redirectsProvider, liveSdk, editingSdk) {
|
|
14
14
|
this.redirectsProvider = redirectsProvider;
|
package/ContentSdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["environment","LiveSdk","EditingSdk","ComponentResolver","PreviewSdk","componentRegistry","ApiClient","DefaultDataProvider","Theme","viewportManager","RedirectsProvider","InternalContentSdk","constructor","redirectsProvider","liveSdk","editingSdk","activeSdk","getEditingSdk","getPage","path","listPages","getAllRedirects","getRedirectByPath","ContentSdk","isPreview","init","config","afterInit","configHash","JSON","stringify","lastConfig","apiClient","apiHost","apiKey","apiTenant","dataProvider","preview","isEditing","theme","from","isClient","setBreakpoints","breakpoints","sdk","assertInitialized","registerComponent","blueprint","register","resolveElement","params","resolve","isPreviewing","Error","contentSdk"],"sources":["ContentSdk.ts"],"sourcesContent":["import type {\n Component,\n IContentSdk,\n PublicPage,\n PublicRedirect,\n ResolvedComponent\n} from \"~/types\";\nimport { environment } from \"./Environment.js\";\nimport { LiveSdk } from \"./LiveSdk.js\";\nimport { EditingSdk } from \"./EditingSdk.js\";\nimport { ComponentResolver, type ResolveElementParams } from \"~/ComponentResolver\";\nimport { PreviewSdk } from \"./PreviewSdk.js\";\nimport { componentRegistry } from \"~/ComponentRegistry\";\nimport { ApiClient } from \"~/dataProviders/ApiClient\";\nimport { DefaultDataProvider } from \"~/dataProviders/DefaultDataProvider\";\nimport type { WebsiteBuilderThemeInput } from \"./types/WebsiteBuilderTheme.js\";\nimport { Theme } from \"./Theme.js\";\nimport { viewportManager } from \"./ViewportManager.js\";\nimport type { IRedirects } from \"~/IRedirects\";\nimport { RedirectsProvider } from \"~/dataProviders/RedirectsProvider\";\n\nexport type ApiConfig = {\n apiKey: string;\n apiHost: string;\n apiTenant: string;\n};\n\nexport type ContentSDKConfig = ApiConfig & {\n preview?: boolean;\n theme?: WebsiteBuilderThemeInput;\n};\n\nclass InternalContentSdk implements IContentSdk, IRedirects {\n private activeSdk: IContentSdk;\n private editingSdk: EditingSdk | undefined;\n private redirectsProvider: IRedirects;\n\n constructor(redirectsProvider: IRedirects, liveSdk: LiveSdk, editingSdk?: EditingSdk) {\n this.redirectsProvider = redirectsProvider;\n this.activeSdk = editingSdk ?? liveSdk;\n this.editingSdk = editingSdk;\n }\n\n getEditingSdk() {\n return this.editingSdk;\n }\n\n async getPage(path: string): Promise<PublicPage | null> {\n return this.activeSdk.getPage(path);\n }\n\n listPages(): Promise<PublicPage[]> {\n return this.activeSdk.listPages();\n }\n\n getAllRedirects(): Promise<Map<string, PublicRedirect>> {\n return this.redirectsProvider.getAllRedirects();\n }\n\n getRedirectByPath(path: string): Promise<PublicRedirect | undefined> {\n return this.redirectsProvider.getRedirectByPath(path);\n }\n}\n\nexport class ContentSdk implements IContentSdk, IRedirects {\n protected sdk?: InternalContentSdk;\n private isPreview = false;\n private lastConfig: any;\n\n public init(config: ContentSDKConfig, afterInit?: () => void): void {\n const configHash = JSON.stringify(config);\n if (this.lastConfig && this.lastConfig === configHash) {\n return;\n }\n\n this.lastConfig = configHash;\n const apiClient = new ApiClient(config.apiHost, config.apiKey, config.apiTenant);\n\n const dataProvider = new DefaultDataProvider({ apiClient });\n\n let liveSdk: IContentSdk = new LiveSdk(dataProvider);\n\n if (config.preview && !environment.isEditing()) {\n this.isPreview = true;\n liveSdk = new PreviewSdk(dataProvider, liveSdk);\n }\n\n const theme = Theme.from(config.theme ?? {});\n\n if (environment.isClient()) {\n viewportManager.setBreakpoints(theme.breakpoints);\n }\n\n let editingSdk;\n if (environment.isEditing()) {\n editingSdk = new EditingSdk(liveSdk, theme);\n }\n\n this.sdk = new InternalContentSdk(\n new RedirectsProvider(apiClient),\n liveSdk as LiveSdk,\n editingSdk\n );\n\n if (typeof afterInit === \"function\") {\n afterInit();\n }\n }\n\n public getEditingSdk() {\n this.assertInitialized();\n return this.sdk.getEditingSdk();\n }\n\n public getPage(path: string) {\n this.assertInitialized();\n return this.sdk.getPage(path);\n }\n\n public listPages() {\n this.assertInitialized();\n return this.sdk.listPages();\n }\n\n public async getAllRedirects() {\n this.assertInitialized();\n return this.sdk.getAllRedirects();\n }\n\n getRedirectByPath(path: string): Promise<PublicRedirect | undefined> {\n this.assertInitialized();\n return this.sdk.getRedirectByPath(path);\n }\n\n registerComponent(blueprint: Component): void {\n this.assertInitialized();\n componentRegistry.register(blueprint);\n }\n\n resolveElement(params: ResolveElementParams): ResolvedComponent[] | null {\n this.assertInitialized();\n return new ComponentResolver(componentRegistry).resolve(params);\n }\n\n isEditing() {\n return environment.isEditing();\n }\n\n isPreviewing() {\n return this.isPreview;\n }\n\n private assertInitialized(): asserts this is this & {\n sdk: IContentSdk;\n } {\n if (!this.sdk) {\n throw new Error(`ContentSdk has not been initialized!`);\n }\n }\n}\n\nexport const contentSdk = new ContentSdk();\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["environment","LiveSdk","EditingSdk","ComponentResolver","PreviewSdk","componentRegistry","ApiClient","DefaultDataProvider","Theme","viewportManager","RedirectsProvider","InternalContentSdk","constructor","redirectsProvider","liveSdk","editingSdk","activeSdk","getEditingSdk","getPage","path","listPages","getAllRedirects","getRedirectByPath","ContentSdk","isPreview","init","config","afterInit","configHash","JSON","stringify","lastConfig","apiClient","apiHost","apiKey","apiTenant","dataProvider","preview","isEditing","theme","from","isClient","setBreakpoints","breakpoints","sdk","assertInitialized","registerComponent","blueprint","register","resolveElement","params","resolve","isPreviewing","Error","contentSdk"],"sources":["ContentSdk.ts"],"sourcesContent":["import type {\n Component,\n IContentSdk,\n PublicPage,\n PublicRedirect,\n ResolvedComponent\n} from \"~/types.js\";\nimport { environment } from \"./Environment.js\";\nimport { LiveSdk } from \"./LiveSdk.js\";\nimport { EditingSdk } from \"./EditingSdk.js\";\nimport { ComponentResolver, type ResolveElementParams } from \"~/ComponentResolver.js\";\nimport { PreviewSdk } from \"./PreviewSdk.js\";\nimport { componentRegistry } from \"~/ComponentRegistry.js\";\nimport { ApiClient } from \"~/dataProviders/ApiClient.js\";\nimport { DefaultDataProvider } from \"~/dataProviders/DefaultDataProvider.js\";\nimport type { WebsiteBuilderThemeInput } from \"./types/WebsiteBuilderTheme.js\";\nimport { Theme } from \"./Theme.js\";\nimport { viewportManager } from \"./ViewportManager.js\";\nimport type { IRedirects } from \"~/IRedirects.js\";\nimport { RedirectsProvider } from \"~/dataProviders/RedirectsProvider.js\";\n\nexport type ApiConfig = {\n apiKey: string;\n apiHost: string;\n apiTenant: string;\n};\n\nexport type ContentSDKConfig = ApiConfig & {\n preview?: boolean;\n theme?: WebsiteBuilderThemeInput;\n};\n\nclass InternalContentSdk implements IContentSdk, IRedirects {\n private activeSdk: IContentSdk;\n private editingSdk: EditingSdk | undefined;\n private redirectsProvider: IRedirects;\n\n constructor(redirectsProvider: IRedirects, liveSdk: LiveSdk, editingSdk?: EditingSdk) {\n this.redirectsProvider = redirectsProvider;\n this.activeSdk = editingSdk ?? liveSdk;\n this.editingSdk = editingSdk;\n }\n\n getEditingSdk() {\n return this.editingSdk;\n }\n\n async getPage(path: string): Promise<PublicPage | null> {\n return this.activeSdk.getPage(path);\n }\n\n listPages(): Promise<PublicPage[]> {\n return this.activeSdk.listPages();\n }\n\n getAllRedirects(): Promise<Map<string, PublicRedirect>> {\n return this.redirectsProvider.getAllRedirects();\n }\n\n getRedirectByPath(path: string): Promise<PublicRedirect | undefined> {\n return this.redirectsProvider.getRedirectByPath(path);\n }\n}\n\nexport class ContentSdk implements IContentSdk, IRedirects {\n protected sdk?: InternalContentSdk;\n private isPreview = false;\n private lastConfig: any;\n\n public init(config: ContentSDKConfig, afterInit?: () => void): void {\n const configHash = JSON.stringify(config);\n if (this.lastConfig && this.lastConfig === configHash) {\n return;\n }\n\n this.lastConfig = configHash;\n const apiClient = new ApiClient(config.apiHost, config.apiKey, config.apiTenant);\n\n const dataProvider = new DefaultDataProvider({ apiClient });\n\n let liveSdk: IContentSdk = new LiveSdk(dataProvider);\n\n if (config.preview && !environment.isEditing()) {\n this.isPreview = true;\n liveSdk = new PreviewSdk(dataProvider, liveSdk);\n }\n\n const theme = Theme.from(config.theme ?? {});\n\n if (environment.isClient()) {\n viewportManager.setBreakpoints(theme.breakpoints);\n }\n\n let editingSdk;\n if (environment.isEditing()) {\n editingSdk = new EditingSdk(liveSdk, theme);\n }\n\n this.sdk = new InternalContentSdk(\n new RedirectsProvider(apiClient),\n liveSdk as LiveSdk,\n editingSdk\n );\n\n if (typeof afterInit === \"function\") {\n afterInit();\n }\n }\n\n public getEditingSdk() {\n this.assertInitialized();\n return this.sdk.getEditingSdk();\n }\n\n public getPage(path: string) {\n this.assertInitialized();\n return this.sdk.getPage(path);\n }\n\n public listPages() {\n this.assertInitialized();\n return this.sdk.listPages();\n }\n\n public async getAllRedirects() {\n this.assertInitialized();\n return this.sdk.getAllRedirects();\n }\n\n getRedirectByPath(path: string): Promise<PublicRedirect | undefined> {\n this.assertInitialized();\n return this.sdk.getRedirectByPath(path);\n }\n\n registerComponent(blueprint: Component): void {\n this.assertInitialized();\n componentRegistry.register(blueprint);\n }\n\n resolveElement(params: ResolveElementParams): ResolvedComponent[] | null {\n this.assertInitialized();\n return new ComponentResolver(componentRegistry).resolve(params);\n }\n\n isEditing() {\n return environment.isEditing();\n }\n\n isPreviewing() {\n return this.isPreview;\n }\n\n private assertInitialized(): asserts this is this & {\n sdk: IContentSdk;\n } {\n if (!this.sdk) {\n throw new Error(`ContentSdk has not been initialized!`);\n }\n }\n}\n\nexport const contentSdk = new ContentSdk();\n"],"mappings":"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","ignoreList":[]}
|
package/DocumentStore.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type JsonPatchOperation } from "./jsonPatch";
|
|
2
|
-
import type { Document } from "./types";
|
|
1
|
+
import { type JsonPatchOperation } from "./jsonPatch.js";
|
|
2
|
+
import type { Document } from "./types.js";
|
|
3
3
|
export declare class DocumentStore<TDocument extends Document = Document> {
|
|
4
4
|
private document;
|
|
5
5
|
private documentReady;
|
|
@@ -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("./types").DocumentElement | null;
|
|
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/DocumentStore.js
CHANGED
package/DocumentStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["jsonPatch","makeAutoObservable","runInAction","observable","DocumentStore","document","documentReady","readyResolvers","constructor","setDocument","doc","Object","assign","forEach","fn","updateDocument","cb","getDocument","getElement","id","elements","updateElement","patch","current","applyPatch","waitForDocument","Promise","resolve","push"],"sources":["DocumentStore.ts"],"sourcesContent":["import { jsonPatch, type JsonPatchOperation } from \"~/jsonPatch\";\nimport type { Document } from \"~/types\";\nimport { makeAutoObservable, runInAction, observable } from \"mobx\";\n\nexport class DocumentStore<TDocument extends Document = Document> {\n private document: TDocument | null = null;\n private documentReady = false;\n private readyResolvers: (() => void)[] = [];\n\n constructor() {\n makeAutoObservable(this);\n }\n\n setDocument(doc: TDocument) {\n runInAction(() => {\n if (this.document) {\n Object.assign(this.document, doc);\n } else {\n this.document = observable(doc);\n }\n this.documentReady = true;\n this.readyResolvers.forEach(fn => fn());\n this.readyResolvers = [];\n });\n }\n\n updateDocument(cb: (document: TDocument) => void) {\n runInAction(() => {\n if (this.document) {\n cb(this.document);\n }\n });\n }\n\n getDocument() {\n return this.document;\n }\n\n getElement(id: string) {\n if (!this.document) {\n return null;\n }\n\n return this.document.elements[id];\n }\n\n updateElement(id: string, patch: Partial<any>) {\n if (!this.document) {\n return;\n }\n\n const current = this.document.elements[id];\n if (current) {\n this.document.elements[id] = { ...current, ...patch };\n }\n }\n\n applyPatch(patch: JsonPatchOperation[]) {\n runInAction(() => {\n jsonPatch.applyPatch(this.document!, patch, false, true);\n });\n }\n\n async waitForDocument(): Promise<TDocument> {\n if (this.documentReady) {\n return this.document as TDocument;\n }\n\n return new Promise(resolve => {\n this.readyResolvers.push(() => {\n resolve(this.document as TDocument);\n });\n });\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAElB,SAASC,kBAAkB,EAAEC,WAAW,EAAEC,UAAU,QAAQ,MAAM;AAElE,OAAO,MAAMC,aAAa,CAAwC;EACtDC,QAAQ,GAAqB,IAAI;EACjCC,aAAa,GAAG,KAAK;EACrBC,cAAc,GAAmB,EAAE;EAE3CC,WAAWA,CAAA,EAAG;IACVP,kBAAkB,CAAC,IAAI,CAAC;EAC5B;EAEAQ,WAAWA,CAACC,GAAc,EAAE;IACxBR,WAAW,CAAC,MAAM;MACd,IAAI,IAAI,CAACG,QAAQ,EAAE;QACfM,MAAM,CAACC,MAAM,CAAC,IAAI,CAACP,QAAQ,EAAEK,GAAG,CAAC;MACrC,CAAC,MAAM;QACH,IAAI,CAACL,QAAQ,GAAGF,UAAU,CAACO,GAAG,CAAC;MACnC;MACA,IAAI,CAACJ,aAAa,GAAG,IAAI;MACzB,IAAI,CAACC,cAAc,CAACM,OAAO,CAACC,EAAE,IAAIA,EAAE,CAAC,CAAC,CAAC;MACvC,IAAI,CAACP,cAAc,GAAG,EAAE;IAC5B,CAAC,CAAC;EACN;EAEAQ,cAAcA,CAACC,EAAiC,EAAE;IAC9Cd,WAAW,CAAC,MAAM;MACd,IAAI,IAAI,CAACG,QAAQ,EAAE;QACfW,EAAE,CAAC,IAAI,CAACX,QAAQ,CAAC;MACrB;IACJ,CAAC,CAAC;EACN;EAEAY,WAAWA,CAAA,EAAG;IACV,OAAO,IAAI,CAACZ,QAAQ;EACxB;EAEAa,UAAUA,CAACC,EAAU,EAAE;IACnB,IAAI,CAAC,IAAI,CAACd,QAAQ,EAAE;MAChB,OAAO,IAAI;IACf;IAEA,OAAO,IAAI,CAACA,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC;EACrC;EAEAE,aAAaA,CAACF,EAAU,EAAEG,KAAmB,EAAE;IAC3C,IAAI,CAAC,IAAI,CAACjB,QAAQ,EAAE;MAChB;IACJ;IAEA,MAAMkB,OAAO,GAAG,IAAI,CAAClB,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC;IAC1C,IAAII,OAAO,EAAE;MACT,IAAI,CAAClB,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC,GAAG;QAAE,GAAGI,OAAO;QAAE,GAAGD;MAAM,CAAC;IACzD;EACJ;EAEAE,UAAUA,CAACF,KAA2B,EAAE;IACpCpB,WAAW,CAAC,MAAM;MACdF,SAAS,CAACwB,UAAU,CAAC,IAAI,CAACnB,QAAQ,EAAGiB,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;IAC5D,CAAC,CAAC;EACN;EAEA,MAAMG,eAAeA,CAAA,EAAuB;IACxC,IAAI,IAAI,CAACnB,aAAa,EAAE;MACpB,OAAO,IAAI,CAACD,QAAQ;IACxB;IAEA,OAAO,IAAIqB,OAAO,CAACC,OAAO,IAAI;MAC1B,IAAI,CAACpB,cAAc,CAACqB,IAAI,CAAC,MAAM;QAC3BD,OAAO,CAAC,IAAI,CAACtB,QAAqB,CAAC;MACvC,CAAC,CAAC;IACN,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["jsonPatch","makeAutoObservable","runInAction","observable","DocumentStore","document","documentReady","readyResolvers","constructor","setDocument","doc","Object","assign","forEach","fn","updateDocument","cb","getDocument","getElement","id","elements","updateElement","patch","current","applyPatch","waitForDocument","Promise","resolve","push"],"sources":["DocumentStore.ts"],"sourcesContent":["import { jsonPatch, type JsonPatchOperation } from \"~/jsonPatch.js\";\nimport type { Document } from \"~/types.js\";\nimport { makeAutoObservable, runInAction, observable } from \"mobx\";\n\nexport class DocumentStore<TDocument extends Document = Document> {\n private document: TDocument | null = null;\n private documentReady = false;\n private readyResolvers: (() => void)[] = [];\n\n constructor() {\n makeAutoObservable(this);\n }\n\n setDocument(doc: TDocument) {\n runInAction(() => {\n if (this.document) {\n Object.assign(this.document, doc);\n } else {\n this.document = observable(doc);\n }\n this.documentReady = true;\n this.readyResolvers.forEach(fn => fn());\n this.readyResolvers = [];\n });\n }\n\n updateDocument(cb: (document: TDocument) => void) {\n runInAction(() => {\n if (this.document) {\n cb(this.document);\n }\n });\n }\n\n getDocument() {\n return this.document;\n }\n\n getElement(id: string) {\n if (!this.document) {\n return null;\n }\n\n return this.document.elements[id];\n }\n\n updateElement(id: string, patch: Partial<any>) {\n if (!this.document) {\n return;\n }\n\n const current = this.document.elements[id];\n if (current) {\n this.document.elements[id] = { ...current, ...patch };\n }\n }\n\n applyPatch(patch: JsonPatchOperation[]) {\n runInAction(() => {\n jsonPatch.applyPatch(this.document!, patch, false, true);\n });\n }\n\n async waitForDocument(): Promise<TDocument> {\n if (this.documentReady) {\n return this.document as TDocument;\n }\n\n return new Promise(resolve => {\n this.readyResolvers.push(() => {\n resolve(this.document as TDocument);\n });\n });\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAElB,SAASC,kBAAkB,EAAEC,WAAW,EAAEC,UAAU,QAAQ,MAAM;AAElE,OAAO,MAAMC,aAAa,CAAwC;EACtDC,QAAQ,GAAqB,IAAI;EACjCC,aAAa,GAAG,KAAK;EACrBC,cAAc,GAAmB,EAAE;EAE3CC,WAAWA,CAAA,EAAG;IACVP,kBAAkB,CAAC,IAAI,CAAC;EAC5B;EAEAQ,WAAWA,CAACC,GAAc,EAAE;IACxBR,WAAW,CAAC,MAAM;MACd,IAAI,IAAI,CAACG,QAAQ,EAAE;QACfM,MAAM,CAACC,MAAM,CAAC,IAAI,CAACP,QAAQ,EAAEK,GAAG,CAAC;MACrC,CAAC,MAAM;QACH,IAAI,CAACL,QAAQ,GAAGF,UAAU,CAACO,GAAG,CAAC;MACnC;MACA,IAAI,CAACJ,aAAa,GAAG,IAAI;MACzB,IAAI,CAACC,cAAc,CAACM,OAAO,CAACC,EAAE,IAAIA,EAAE,CAAC,CAAC,CAAC;MACvC,IAAI,CAACP,cAAc,GAAG,EAAE;IAC5B,CAAC,CAAC;EACN;EAEAQ,cAAcA,CAACC,EAAiC,EAAE;IAC9Cd,WAAW,CAAC,MAAM;MACd,IAAI,IAAI,CAACG,QAAQ,EAAE;QACfW,EAAE,CAAC,IAAI,CAACX,QAAQ,CAAC;MACrB;IACJ,CAAC,CAAC;EACN;EAEAY,WAAWA,CAAA,EAAG;IACV,OAAO,IAAI,CAACZ,QAAQ;EACxB;EAEAa,UAAUA,CAACC,EAAU,EAAE;IACnB,IAAI,CAAC,IAAI,CAACd,QAAQ,EAAE;MAChB,OAAO,IAAI;IACf;IAEA,OAAO,IAAI,CAACA,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC;EACrC;EAEAE,aAAaA,CAACF,EAAU,EAAEG,KAAmB,EAAE;IAC3C,IAAI,CAAC,IAAI,CAACjB,QAAQ,EAAE;MAChB;IACJ;IAEA,MAAMkB,OAAO,GAAG,IAAI,CAAClB,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC;IAC1C,IAAII,OAAO,EAAE;MACT,IAAI,CAAClB,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC,GAAG;QAAE,GAAGI,OAAO;QAAE,GAAGD;MAAM,CAAC;IACzD;EACJ;EAEAE,UAAUA,CAACF,KAA2B,EAAE;IACpCpB,WAAW,CAAC,MAAM;MACdF,SAAS,CAACwB,UAAU,CAAC,IAAI,CAACnB,QAAQ,EAAGiB,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;IAC5D,CAAC,CAAC;EACN;EAEA,MAAMG,eAAeA,CAAA,EAAuB;IACxC,IAAI,IAAI,CAACnB,aAAa,EAAE;MACpB,OAAO,IAAI,CAACD,QAAQ;IACxB;IAEA,OAAO,IAAIqB,OAAO,CAACC,OAAO,IAAI;MAC1B,IAAI,CAACpB,cAAc,CAACqB,IAAI,CAAC,MAAM;QAC3BD,OAAO,CAAC,IAAI,CAACtB,QAAqB,CAAC;MACvC,CAAC,CAAC;IACN,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Document } from "./types";
|
|
2
|
-
import { DocumentStore } from "./DocumentStore";
|
|
1
|
+
import type { Document } from "./types.js";
|
|
2
|
+
import { DocumentStore } from "./DocumentStore.js";
|
|
3
3
|
declare class DocumentStoreManager {
|
|
4
4
|
private stores;
|
|
5
5
|
getStores(): Map<string, DocumentStore<Document>>;
|
package/DocumentStoreManager.js
CHANGED