@webiny/website-builder-sdk 0.0.0-unstable.eb196ccd2f → 0.0.0-unstable.eb81deee7e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/BindingsApi.js +29 -36
  2. package/BindingsApi.js.map +1 -1
  3. package/BindingsProcessor.js +34 -43
  4. package/BindingsProcessor.js.map +1 -1
  5. package/BindingsProcessor.test.js +82 -77
  6. package/BindingsProcessor.test.js.map +1 -1
  7. package/BindingsResolver.d.ts +5 -2
  8. package/BindingsResolver.js +99 -122
  9. package/BindingsResolver.js.map +1 -1
  10. package/BindingsResolver.test.js +399 -362
  11. package/BindingsResolver.test.js.map +1 -1
  12. package/ComponentInputTraverser.js +32 -49
  13. package/ComponentInputTraverser.js.map +1 -1
  14. package/ComponentManifestToAstConverter.js +20 -21
  15. package/ComponentManifestToAstConverter.js.map +1 -1
  16. package/ComponentRegistry.d.ts +9 -0
  17. package/ComponentRegistry.js +38 -22
  18. package/ComponentRegistry.js.map +1 -1
  19. package/ComponentResolver.d.ts +3 -2
  20. package/ComponentResolver.js +39 -29
  21. package/ComponentResolver.js.map +1 -1
  22. package/ComponentResolver.test.d.ts +1 -0
  23. package/ComponentResolver.test.js +81 -0
  24. package/ComponentResolver.test.js.map +1 -0
  25. package/ConstraintEvaluator.d.ts +36 -0
  26. package/ConstraintEvaluator.js +288 -0
  27. package/ConstraintEvaluator.js.map +1 -0
  28. package/ConstraintEvaluator.test.d.ts +1 -0
  29. package/ConstraintEvaluator.test.js +1634 -0
  30. package/ConstraintEvaluator.test.js.map +1 -0
  31. package/ContentSdk.d.ts +17 -3
  32. package/ContentSdk.js +113 -90
  33. package/ContentSdk.js.map +1 -1
  34. package/DocumentStore.d.ts +1 -1
  35. package/DocumentStore.js +47 -59
  36. package/DocumentStore.js.map +1 -1
  37. package/DocumentStoreManager.js +17 -16
  38. package/DocumentStoreManager.js.map +1 -1
  39. package/EditingSdk.d.ts +2 -2
  40. package/EditingSdk.js +92 -124
  41. package/EditingSdk.js.map +1 -1
  42. package/ElementFactory.d.ts +2 -3
  43. package/ElementFactory.js +164 -163
  44. package/ElementFactory.js.map +1 -1
  45. package/ElementFactory.objectListDefaults.test.d.ts +1 -0
  46. package/ElementFactory.objectListDefaults.test.js +423 -0
  47. package/ElementFactory.objectListDefaults.test.js.map +1 -0
  48. package/ElementFactory.test.d.ts +1 -0
  49. package/ElementFactory.test.js +353 -0
  50. package/ElementFactory.test.js.map +1 -0
  51. package/Environment.js +18 -19
  52. package/Environment.js.map +1 -1
  53. package/FunctionConverter.js +8 -7
  54. package/FunctionConverter.js.map +1 -1
  55. package/HashObject.js +11 -12
  56. package/HashObject.js.map +1 -1
  57. package/HotkeyManager.js +41 -48
  58. package/HotkeyManager.js.map +1 -1
  59. package/IBindingsUpdater.js +0 -3
  60. package/IRedirects.js +0 -3
  61. package/InheritanceProcessor.d.ts +2 -2
  62. package/InheritanceProcessor.js +99 -139
  63. package/InheritanceProcessor.js.map +1 -1
  64. package/InheritanceProcessor.test.js +178 -178
  65. package/InheritanceProcessor.test.js.map +1 -1
  66. package/InheritedValueResolver.d.ts +18 -1
  67. package/InheritedValueResolver.js +18 -20
  68. package/InheritedValueResolver.js.map +1 -1
  69. package/InputBindingsProcessor.d.ts +23 -2
  70. package/InputBindingsProcessor.js +200 -289
  71. package/InputBindingsProcessor.js.map +1 -1
  72. package/InputBindingsProcessorTokens.test.d.ts +1 -0
  73. package/InputBindingsProcessorTokens.test.js +400 -0
  74. package/InputBindingsProcessorTokens.test.js.map +1 -0
  75. package/InputsBindingsProcessor.test.js +334 -313
  76. package/InputsBindingsProcessor.test.js.map +1 -1
  77. package/InputsUpdater.d.ts +1 -1
  78. package/InputsUpdater.js +23 -26
  79. package/InputsUpdater.js.map +1 -1
  80. package/LiveSdk.d.ts +2 -2
  81. package/LiveSdk.js +12 -13
  82. package/LiveSdk.js.map +1 -1
  83. package/Logger.d.ts +2 -1
  84. package/Logger.js +9 -8
  85. package/Logger.js.map +1 -1
  86. package/MouseTracker.js +77 -83
  87. package/MouseTracker.js.map +1 -1
  88. package/NullSdk.d.ts +4 -3
  89. package/NullSdk.js +22 -14
  90. package/NullSdk.js.map +1 -1
  91. package/PreviewDocument.d.ts +1 -0
  92. package/PreviewDocument.js +30 -30
  93. package/PreviewDocument.js.map +1 -1
  94. package/PreviewSdk.d.ts +4 -3
  95. package/PreviewSdk.js +19 -17
  96. package/PreviewSdk.js.map +1 -1
  97. package/PreviewViewport.d.ts +0 -1
  98. package/PreviewViewport.js +50 -82
  99. package/PreviewViewport.js.map +1 -1
  100. package/README.md +10 -2
  101. package/ResizeObserver.js +24 -31
  102. package/ResizeObserver.js.map +1 -1
  103. package/StylesBindingsProcessor.d.ts +12 -2
  104. package/StylesBindingsProcessor.js +62 -79
  105. package/StylesBindingsProcessor.js.map +1 -1
  106. package/StylesUpdater.d.ts +1 -1
  107. package/StylesUpdater.js +20 -25
  108. package/StylesUpdater.js.map +1 -1
  109. package/Theme.js +30 -32
  110. package/Theme.js.map +1 -1
  111. package/ViewportManager.d.ts +2 -0
  112. package/ViewportManager.js +89 -97
  113. package/ViewportManager.js.map +1 -1
  114. package/assertBindingShapes.d.ts +31 -0
  115. package/assertBindingShapes.js +64 -0
  116. package/assertBindingShapes.js.map +1 -0
  117. package/assertBindingShapes.test.d.ts +1 -0
  118. package/assertBindingShapes.test.js +131 -0
  119. package/assertBindingShapes.test.js.map +1 -0
  120. package/asset/deliveryUrl.d.ts +41 -0
  121. package/asset/deliveryUrl.js +34 -0
  122. package/asset/deliveryUrl.js.map +1 -0
  123. package/asset/deliveryUrl.test.d.ts +1 -0
  124. package/asset/deliveryUrl.test.js +127 -0
  125. package/asset/deliveryUrl.test.js.map +1 -0
  126. package/asset/geometry.d.ts +7 -0
  127. package/asset/geometry.js +10 -0
  128. package/asset/geometry.js.map +1 -0
  129. package/asset/imageSrcSet.d.ts +63 -0
  130. package/asset/imageSrcSet.js +98 -0
  131. package/asset/imageSrcSet.js.map +1 -0
  132. package/asset/imageSrcSet.test.d.ts +1 -0
  133. package/asset/imageSrcSet.test.js +103 -0
  134. package/asset/imageSrcSet.test.js.map +1 -0
  135. package/asset/index.d.ts +5 -0
  136. package/asset/index.js +5 -0
  137. package/asset/normalize.d.ts +24 -0
  138. package/asset/normalize.js +106 -0
  139. package/asset/normalize.js.map +1 -0
  140. package/asset/normalize.test.d.ts +1 -0
  141. package/asset/normalize.test.js +263 -0
  142. package/asset/normalize.test.js.map +1 -0
  143. package/asset/types.d.ts +2 -0
  144. package/asset/types.js +0 -0
  145. package/constants.d.ts +1 -0
  146. package/constants.js +7 -5
  147. package/constants.js.map +1 -1
  148. package/contentEntry/ContentEntryBindingsResolver.d.ts +30 -0
  149. package/contentEntry/ContentEntryBindingsResolver.js +45 -0
  150. package/contentEntry/ContentEntryBindingsResolver.js.map +1 -0
  151. package/contentEntry/ContentEntryCache.d.ts +46 -0
  152. package/contentEntry/ContentEntryCache.js +50 -0
  153. package/contentEntry/ContentEntryCache.js.map +1 -0
  154. package/contentEntry/resolveContentEntry.d.ts +74 -0
  155. package/contentEntry/resolveContentEntry.js +53 -0
  156. package/contentEntry/resolveContentEntry.js.map +1 -0
  157. package/contentEntry/resolveContentEntry.test.d.ts +1 -0
  158. package/contentEntry/resolveContentEntry.test.js +213 -0
  159. package/contentEntry/resolveContentEntry.test.js.map +1 -0
  160. package/createComponent.d.ts +5 -0
  161. package/createComponent.js +32 -0
  162. package/createComponent.js.map +1 -0
  163. package/createElement.js +5 -6
  164. package/createElement.js.map +1 -1
  165. package/createInput.d.ts +132 -16
  166. package/createInput.js +92 -111
  167. package/createInput.js.map +1 -1
  168. package/createTheme.js +2 -3
  169. package/createTheme.js.map +1 -1
  170. package/dataProviders/ApiClient.d.ts +10 -5
  171. package/dataProviders/ApiClient.js +40 -49
  172. package/dataProviders/ApiClient.js.map +1 -1
  173. package/dataProviders/DefaultDataProvider.d.ts +7 -3
  174. package/dataProviders/DefaultDataProvider.js +91 -45
  175. package/dataProviders/DefaultDataProvider.js.map +1 -1
  176. package/dataProviders/GET_EXPERIMENT_PAUSED.d.ts +1 -0
  177. package/dataProviders/GET_EXPERIMENT_PAUSED.js +17 -0
  178. package/dataProviders/GET_EXPERIMENT_PAUSED.js.map +1 -0
  179. package/dataProviders/GET_PAGE_BY_ID.d.ts +1 -1
  180. package/dataProviders/GET_PAGE_BY_ID.js +4 -1
  181. package/dataProviders/GET_PAGE_BY_ID.js.map +1 -1
  182. package/dataProviders/GET_PAGE_BY_PATH.d.ts +1 -1
  183. package/dataProviders/GET_PAGE_BY_PATH.js +4 -1
  184. package/dataProviders/GET_PAGE_BY_PATH.js.map +1 -1
  185. package/dataProviders/GET_PAGE_EXPERIMENT.d.ts +1 -0
  186. package/dataProviders/GET_PAGE_EXPERIMENT.js +32 -0
  187. package/dataProviders/GET_PAGE_EXPERIMENT.js.map +1 -0
  188. package/dataProviders/GET_VARIANT_CONTENT.d.ts +1 -0
  189. package/dataProviders/GET_VARIANT_CONTENT.js +24 -0
  190. package/dataProviders/GET_VARIANT_CONTENT.js.map +1 -0
  191. package/dataProviders/LIST_PUBLISHED_PAGES.d.ts +1 -1
  192. package/dataProviders/LIST_PUBLISHED_PAGES.js +17 -5
  193. package/dataProviders/LIST_PUBLISHED_PAGES.js.map +1 -1
  194. package/dataProviders/NullDataProvider.d.ts +16 -4
  195. package/dataProviders/NullDataProvider.js +30 -13
  196. package/dataProviders/NullDataProvider.js.map +1 -1
  197. package/dataProviders/RedirectsProvider.js +24 -27
  198. package/dataProviders/RedirectsProvider.js.map +1 -1
  199. package/defaultBreakpoints.js +43 -22
  200. package/defaultBreakpoints.js.map +1 -1
  201. package/documentOperations/$addElementReferenceToParent.d.ts +1 -1
  202. package/documentOperations/$addElementReferenceToParent.js +30 -26
  203. package/documentOperations/$addElementReferenceToParent.js.map +1 -1
  204. package/documentOperations/AddElement.js +8 -7
  205. package/documentOperations/AddElement.js.map +1 -1
  206. package/documentOperations/AddToParent.d.ts +2 -2
  207. package/documentOperations/AddToParent.js +14 -13
  208. package/documentOperations/AddToParent.js.map +1 -1
  209. package/documentOperations/IDocumentOperation.js +0 -3
  210. package/documentOperations/RemoveElement.js +10 -7
  211. package/documentOperations/RemoveElement.js.map +1 -1
  212. package/documentOperations/SetGlobalInputBinding.js +23 -22
  213. package/documentOperations/SetGlobalInputBinding.js.map +1 -1
  214. package/documentOperations/SetGlobalStyleBinding.js +23 -23
  215. package/documentOperations/SetGlobalStyleBinding.js.map +1 -1
  216. package/documentOperations/SetInputBindingOverride.js +30 -29
  217. package/documentOperations/SetInputBindingOverride.js.map +1 -1
  218. package/documentOperations/SetStyleBindingOverride.js +30 -31
  219. package/documentOperations/SetStyleBindingOverride.js.map +1 -1
  220. package/documentOperations/index.js +9 -8
  221. package/documentOperations/index.js.map +1 -1
  222. package/experiments/PostHogAnalyticsProvider.d.ts +31 -0
  223. package/experiments/PostHogAnalyticsProvider.js +28 -0
  224. package/experiments/PostHogAnalyticsProvider.js.map +1 -0
  225. package/experiments/analyticsProvider.d.ts +4 -0
  226. package/experiments/analyticsProvider.js +11 -0
  227. package/experiments/analyticsProvider.js.map +1 -0
  228. package/experiments/bucketing.d.ts +27 -0
  229. package/experiments/bucketing.js +91 -0
  230. package/experiments/bucketing.js.map +1 -0
  231. package/experiments/bucketing.test.d.ts +1 -0
  232. package/experiments/bucketing.test.js +183 -0
  233. package/experiments/bucketing.test.js.map +1 -0
  234. package/experiments/index.d.ts +5 -0
  235. package/experiments/index.js +5 -0
  236. package/experiments/render.d.ts +79 -0
  237. package/experiments/render.js +149 -0
  238. package/experiments/render.js.map +1 -0
  239. package/experiments/types.d.ts +108 -0
  240. package/experiments/types.js +4 -0
  241. package/experiments/types.js.map +1 -0
  242. package/findMatchingAstNode.js +11 -13
  243. package/findMatchingAstNode.js.map +1 -1
  244. package/generateElementId.d.ts +1 -1
  245. package/generateElementId.js +2 -2
  246. package/generateElementId.js.map +1 -1
  247. package/headersProvider.js +4 -3
  248. package/headersProvider.js.map +1 -1
  249. package/image/geometry.d.ts +54 -0
  250. package/image/geometry.js +112 -0
  251. package/image/geometry.js.map +1 -0
  252. package/image/geometry.test.d.ts +1 -0
  253. package/image/geometry.test.js +190 -0
  254. package/image/geometry.test.js.map +1 -0
  255. package/image/index.d.ts +3 -0
  256. package/image/index.js +3 -0
  257. package/image/presets.d.ts +6 -0
  258. package/image/presets.js +20 -0
  259. package/image/presets.js.map +1 -0
  260. package/image/types.d.ts +10 -0
  261. package/image/types.js +0 -0
  262. package/index.d.ts +12 -1
  263. package/index.js +11 -3
  264. package/jsonPatch.d.ts +1 -1
  265. package/jsonPatch.js +5 -9
  266. package/jsonPatch.js.map +1 -1
  267. package/messages.js +12 -11
  268. package/messages.js.map +1 -1
  269. package/messenger/MessageOrigin.js +12 -11
  270. package/messenger/MessageOrigin.js.map +1 -1
  271. package/messenger/Messenger.js +59 -70
  272. package/messenger/Messenger.js.map +1 -1
  273. package/messenger/index.js +0 -2
  274. package/package.json +19 -22
  275. package/registerComponentGroup.js +5 -6
  276. package/registerComponentGroup.js.map +1 -1
  277. package/tokenBinding.d.ts +26 -0
  278. package/tokenBinding.js +15 -0
  279. package/tokenBinding.js.map +1 -0
  280. package/tokenBinding.test.d.ts +1 -0
  281. package/tokenBinding.test.js +165 -0
  282. package/tokenBinding.test.js.map +1 -0
  283. package/types/ShorthandCssProperties.js +0 -3
  284. package/types/WebsiteBuilderTheme.d.ts +54 -45
  285. package/types/WebsiteBuilderTheme.js +0 -3
  286. package/types.d.ts +294 -13
  287. package/types.js +0 -3
  288. package/IBindingsUpdater.js.map +0 -1
  289. package/IRedirects.js.map +0 -1
  290. package/documentOperations/IDocumentOperation.js.map +0 -1
  291. package/index.js.map +0 -1
  292. package/lexical/createDefaultLexicalTheme.d.ts +0 -2
  293. package/lexical/createDefaultLexicalTheme.js +0 -84
  294. package/lexical/createDefaultLexicalTheme.js.map +0 -1
  295. package/lexical/createLexicalTheme.d.ts +0 -2
  296. package/lexical/createLexicalTheme.js +0 -7
  297. package/lexical/createLexicalTheme.js.map +0 -1
  298. package/lexical/deepMerge.d.ts +0 -1
  299. package/lexical/deepMerge.js +0 -23
  300. package/lexical/deepMerge.js.map +0 -1
  301. package/messenger/index.js.map +0 -1
  302. package/types/LexicalEditorTheme.d.ts +0 -2
  303. package/types/LexicalEditorTheme.js +0 -3
  304. package/types/LexicalEditorTheme.js.map +0 -1
  305. package/types/ShorthandCssProperties.js.map +0 -1
  306. package/types/WebsiteBuilderTheme.js.map +0 -1
  307. package/types.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["InputsBindingsProcessor","ElementFactory","describe","simpleAst","name","type","list","path","children","input","label","fields","withSlotAst","breakpoints","baseBindings","inputs","title","id","static","styles","overrides","tablet","mobile","getInputsBindingsProcessor","bindings","ast","elementFactory","acceptsChildren","renderer","defaultValue","processor","it","deep","toDeepInputs","expect","toEqual","items","newInputs","updater","createUpdate","rebuilt","elementId","applyToDocument","elementBindings","toBe","toBeUndefined","rawBindings","patch","createJsonPatch","arrayContaining","objectContaining","op","value","deepInputs","push","action","params","component","elements","toMatchObject","any","String"],"sources":["InputsBindingsProcessor.test.ts"],"sourcesContent":["import { InputsBindingsProcessor } from \"./InputBindingsProcessor.js\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter.js\";\nimport type { DocumentElementBindings } from \"~/types.js\";\nimport { ElementFactory } from \"~/ElementFactory.js\";\n\ndescribe(\"InputsBindingsProcessor\", () => {\n // Example simple AST (you can expand as needed)\n const simpleAst: InputAstNode[] = [\n {\n name: \"title\",\n type: \"text\",\n list: false,\n path: \"title\",\n children: [],\n input: {\n type: \"text\",\n name: \"title\",\n label: \"Title\"\n }\n },\n {\n name: \"items\",\n type: \"object\",\n list: true,\n path: \"items\",\n children: [\n {\n name: \"label\",\n type: \"text\",\n list: false,\n path: \"items.label\",\n children: [],\n input: {\n type: \"text\",\n name: \"label\",\n label: \"Label\"\n }\n }\n ],\n input: {\n type: \"object\",\n name: \"items\",\n list: true,\n fields: [\n {\n type: \"text\",\n name: \"label\",\n label: \"Label\"\n }\n ]\n }\n }\n ];\n\n const withSlotAst: InputAstNode[] = [\n {\n path: \"children\",\n children: [],\n name: \"children\",\n type: \"slot\",\n list: false,\n input: {\n type: \"slot\",\n name: \"children\",\n label: \"Children\"\n }\n }\n ];\n\n const breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n\n const baseBindings: DocumentElementBindings = {\n inputs: {\n title: { id: \"title\", static: \"Base Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Base Label 1\",\n type: \"text\"\n },\n \"items/1/label\": {\n id: \"label1\",\n static: \"Base Label 2\",\n type: \"text\"\n }\n },\n styles: {}\n };\n\n const overrides: DocumentElementBindings[\"overrides\"] = {\n tablet: {\n inputs: {\n title: { id: \"title\", static: \"Tablet Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Tablet Label 1\",\n type: \"text\"\n }\n }\n },\n mobile: {\n inputs: {\n title: { id: \"title\", static: \"Mobile Title\", type: \"text\" }\n }\n }\n };\n\n const getInputsBindingsProcessor = (\n bindings: DocumentElementBindings = baseBindings,\n ast = simpleAst\n ) => {\n const elementFactory = new ElementFactory({\n \"Webiny/GridColumn\": {\n name: \"Webiny/GridColumn\",\n label: \"Column\",\n acceptsChildren: true,\n inputs: [\n {\n type: \"slot\",\n list: true,\n renderer: \"Webiny/Slot\",\n name: \"children\",\n defaultValue: []\n }\n ]\n }\n });\n const processor = new InputsBindingsProcessor(\n \"elementId\",\n ast,\n breakpoints,\n bindings,\n elementFactory\n );\n\n return { processor, bindings };\n };\n\n it(\"toDeep should convert flat bindings to nested object\", () => {\n const { processor } = getInputsBindingsProcessor();\n\n const deep = processor.toDeepInputs(baseBindings.inputs ?? {});\n expect(deep).toEqual({\n title: \"Base Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n });\n });\n\n it(\"applyInputs should assign base breakpoint inputs correctly\", () => {\n const { processor } = getInputsBindingsProcessor();\n\n const newInputs = {\n title: \"New Base Title\",\n items: [{ label: \"New Label 1\" }, { label: \"New Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs.title.static).toBe(\"New Base Title\");\n expect(elementBindings.inputs[\"items/0/label\"].static).toBe(\"New Label 1\");\n expect(elementBindings.inputs[\"items/1/label\"].static).toBe(\"New Label 2\");\n expect(elementBindings.overrides).toBeUndefined();\n });\n\n it(\"applyInputs should assign overrides correctly, skipping inherited values\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Mobile Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs.title.static).toBe(\"Mobile Title\");\n // Items are same as base, so should not be in overrides\n expect(elementBindings.overrides?.mobile.inputs?.[\"items/0/label\"]).toBeUndefined();\n });\n\n it(\"createPatch should create correct json patch for input changes\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor, bindings } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Changed Title\",\n items: [{ label: \"Changed Label 1\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const patch = updater.createJsonPatch(bindings);\n\n // You're seeing the weird `~1` delimiter because that's what fast-json-patch does with indexes.\n expect(patch).toEqual(\n expect.arrayContaining([\n expect.objectContaining({\n op: \"remove\",\n path: \"/inputs/items~11~1label\"\n }),\n expect.objectContaining({\n op: \"replace\",\n path: \"/inputs/title/static\",\n value: \"Changed Title\"\n }),\n expect.objectContaining({\n op: \"replace\",\n path: \"/inputs/items~10~1label/static\",\n value: \"Changed Label 1\"\n })\n ])\n );\n });\n\n it(\"applyInputs removes keys missing in new inputs\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: {\n ...baseBindings.inputs,\n \"some/key\": { id: \"someKey\", static: \"toRemove\", type: \"text\" }\n },\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Base Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs[\"some/key\"]).toBeUndefined();\n });\n\n it(\"createUpdate should apply correct changes to the document\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings, [\n ...simpleAst,\n ...withSlotAst\n ]);\n\n const deepInputs = processor.toDeepInputs(rawBindings.inputs!);\n\n deepInputs.items.push({ label: \"New Label 1\" });\n deepInputs.children = {\n action: \"CreateElement\",\n params: {\n component: \"Webiny/GridColumn\"\n }\n };\n\n const updater = processor.createUpdate(deepInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } }, elements: {} };\n updater.applyToDocument(rebuilt);\n\n expect(rebuilt.bindings.elementId.inputs).toMatchObject({\n title: { id: \"title\", static: \"Base Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Base Label 1\",\n type: \"text\"\n },\n \"items/1/label\": {\n id: \"label1\",\n static: \"Base Label 2\",\n type: \"text\"\n },\n \"items/2/label\": {\n id: expect.any(String),\n static: \"New Label 1\",\n type: \"text\"\n },\n children: {\n id: expect.any(String),\n static: expect.any(String),\n type: \"slot\"\n }\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"InputsBindingsProcessor.test.js","sources":["../src/InputsBindingsProcessor.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { InputsBindingsProcessor } from \"./InputBindingsProcessor.js\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter.js\";\nimport type { DocumentElementBindings } from \"~/types.js\";\nimport { ElementFactory } from \"~/ElementFactory.js\";\n\ndescribe(\"InputsBindingsProcessor\", () => {\n // Example simple AST (you can expand as needed)\n const simpleAst: InputAstNode[] = [\n {\n name: \"title\",\n type: \"text\",\n list: false,\n path: \"title\",\n children: [],\n input: {\n type: \"text\",\n name: \"title\",\n label: \"Title\"\n }\n },\n {\n name: \"items\",\n type: \"object\",\n list: true,\n path: \"items\",\n children: [\n {\n name: \"label\",\n type: \"text\",\n list: false,\n path: \"items.label\",\n children: [],\n input: {\n type: \"text\",\n name: \"label\",\n label: \"Label\"\n }\n }\n ],\n input: {\n type: \"object\",\n name: \"items\",\n list: true,\n fields: [\n {\n type: \"text\",\n name: \"label\",\n label: \"Label\"\n }\n ]\n }\n }\n ];\n\n const withSlotAst: InputAstNode[] = [\n {\n path: \"children\",\n children: [],\n name: \"children\",\n type: \"slot\",\n list: false,\n input: {\n type: \"slot\",\n name: \"children\",\n label: \"Children\"\n }\n }\n ];\n\n const breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n\n const baseBindings: DocumentElementBindings = {\n inputs: {\n title: { id: \"title\", static: \"Base Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Base Label 1\",\n type: \"text\"\n },\n \"items/1/label\": {\n id: \"label1\",\n static: \"Base Label 2\",\n type: \"text\"\n }\n },\n styles: {}\n };\n\n const overrides: DocumentElementBindings[\"overrides\"] = {\n tablet: {\n inputs: {\n title: { id: \"title\", static: \"Tablet Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Tablet Label 1\",\n type: \"text\"\n }\n }\n },\n mobile: {\n inputs: {\n title: { id: \"title\", static: \"Mobile Title\", type: \"text\" }\n }\n }\n };\n\n const getInputsBindingsProcessor = (\n bindings: DocumentElementBindings = baseBindings,\n ast = simpleAst\n ) => {\n const elementFactory = new ElementFactory({\n \"Webiny/GridColumn\": {\n name: \"Webiny/GridColumn\",\n label: \"Column\",\n tags: [],\n acceptsChildren: true,\n inputs: [\n {\n type: \"slot\",\n list: true,\n renderer: \"Webiny/Slot\",\n name: \"children\",\n defaultValue: []\n }\n ]\n }\n });\n const processor = new InputsBindingsProcessor(\n \"elementId\",\n ast,\n breakpoints,\n bindings,\n elementFactory\n );\n\n return { processor, bindings };\n };\n\n it(\"toDeep should convert flat bindings to nested object\", () => {\n const { processor } = getInputsBindingsProcessor();\n\n const deep = processor.toDeepInputs(baseBindings.inputs ?? {});\n expect(deep).toEqual({\n title: \"Base Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n });\n });\n\n it(\"applyInputs should assign base breakpoint inputs correctly\", () => {\n const { processor } = getInputsBindingsProcessor();\n\n const newInputs = {\n title: \"New Base Title\",\n items: [{ label: \"New Label 1\" }, { label: \"New Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs.title.static).toBe(\"New Base Title\");\n expect(elementBindings.inputs[\"items/0/label\"].static).toBe(\"New Label 1\");\n expect(elementBindings.inputs[\"items/1/label\"].static).toBe(\"New Label 2\");\n expect(elementBindings.overrides).toBeUndefined();\n });\n\n it(\"applyInputs should assign overrides correctly, skipping inherited values\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Mobile Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs.title.static).toBe(\"Mobile Title\");\n // Items are same as base, so should not be in overrides\n expect(elementBindings.overrides?.mobile.inputs?.[\"items/0/label\"]).toBeUndefined();\n });\n\n it(\"createPatch should create correct json patch for input changes\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor, bindings } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Changed Title\",\n items: [{ label: \"Changed Label 1\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const patch = updater.createJsonPatch(bindings);\n\n // You're seeing the weird `~1` delimiter because that's what fast-json-patch does with indexes.\n expect(patch).toEqual(\n expect.arrayContaining([\n expect.objectContaining({\n op: \"remove\",\n path: \"/inputs/items~11~1label\"\n }),\n expect.objectContaining({\n op: \"replace\",\n path: \"/inputs/title/static\",\n value: \"Changed Title\"\n }),\n expect.objectContaining({\n op: \"replace\",\n path: \"/inputs/items~10~1label/static\",\n value: \"Changed Label 1\"\n })\n ])\n );\n });\n\n it(\"applyInputs removes keys missing in new inputs\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: {\n ...baseBindings.inputs,\n \"some/key\": { id: \"someKey\", static: \"toRemove\", type: \"text\" }\n },\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Base Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs[\"some/key\"]).toBeUndefined();\n });\n\n it(\"createUpdate should apply correct changes to the document\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings, [\n ...simpleAst,\n ...withSlotAst\n ]);\n\n const deepInputs = processor.toDeepInputs(rawBindings.inputs!);\n\n deepInputs.items.push({ label: \"New Label 1\" });\n deepInputs.children = {\n action: \"CreateElement\",\n params: {\n component: \"Webiny/GridColumn\"\n }\n };\n\n const updater = processor.createUpdate(deepInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } }, elements: {} };\n updater.applyToDocument(rebuilt);\n\n expect(rebuilt.bindings.elementId.inputs).toMatchObject({\n title: { id: \"title\", static: \"Base Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Base Label 1\",\n type: \"text\"\n },\n \"items/1/label\": {\n id: \"label1\",\n static: \"Base Label 2\",\n type: \"text\"\n },\n \"items/2/label\": {\n id: expect.any(String),\n static: \"New Label 1\",\n type: \"text\"\n },\n children: {\n id: expect.any(String),\n static: expect.any(String),\n type: \"slot\"\n }\n });\n });\n});\n"],"names":["describe","simpleAst","withSlotAst","breakpoints","baseBindings","overrides","getInputsBindingsProcessor","bindings","ast","elementFactory","ElementFactory","processor","InputsBindingsProcessor","it","deep","expect","newInputs","updater","rebuilt","elementBindings","rawBindings","patch","deepInputs","String"],"mappings":"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"}
@@ -8,5 +8,5 @@ export declare class InputsUpdater implements IBindingsUpdater {
8
8
  private elementId;
9
9
  constructor(elementId: string, bindings: ElementInputsBindings, operations: IDocumentOperation[]);
10
10
  applyToDocument(document: Document): void;
11
- createJsonPatch(bindings: DocumentElementBindings): import("./jsonPatch.js").JsonPatchOperation[];
11
+ createJsonPatch(bindings: DocumentElementBindings): import("fast-json-patch").Operation[];
12
12
  }
package/InputsUpdater.js CHANGED
@@ -1,34 +1,31 @@
1
1
  import { jsonPatch } from "./jsonPatch.js";
2
2
  import set from "lodash/set.js";
3
- export class InputsUpdater {
4
- constructor(elementId, bindings, operations) {
5
- this.elementId = elementId;
6
- this.operations = operations;
7
- this.bindings = bindings;
8
- }
9
- applyToDocument(document) {
10
- document.bindings[this.elementId].inputs = structuredClone(this.bindings.inputs);
11
- if (this.bindings.overrides) {
12
- for (const [bp, overrides] of Object.entries(this.bindings.overrides)) {
13
- if (overrides.inputs) {
14
- set(document.bindings, `${this.elementId}.overrides.${bp}.inputs`, structuredClone(this.bindings.overrides[bp].inputs));
3
+ class InputsUpdater {
4
+ constructor(elementId, bindings, operations){
5
+ this.elementId = elementId;
6
+ this.operations = operations;
7
+ this.bindings = bindings;
8
+ }
9
+ applyToDocument(document) {
10
+ document.bindings[this.elementId].inputs = structuredClone(this.bindings.inputs);
11
+ if (this.bindings.overrides) {
12
+ for (const [bp, overrides] of Object.entries(this.bindings.overrides))if (overrides.inputs) set(document.bindings, `${this.elementId}.overrides.${bp}.inputs`, structuredClone(this.bindings.overrides[bp].inputs));
15
13
  }
16
- }
14
+ this.operations.forEach((operation)=>operation.apply(document));
17
15
  }
18
- this.operations.forEach(operation => operation.apply(document));
19
- }
20
- createJsonPatch(bindings) {
21
- const toCompare = {
22
- ...this.bindings
23
- };
24
- if (Object.keys(toCompare.overrides ?? {}).length === 0) {
25
- delete toCompare.overrides;
16
+ createJsonPatch(bindings) {
17
+ const toCompare = {
18
+ ...this.bindings
19
+ };
20
+ if (0 === Object.keys(toCompare.overrides ?? {}).length) delete toCompare.overrides;
21
+ const ignore = [
22
+ "/styles",
23
+ "/overrides/styles",
24
+ "/metadata"
25
+ ];
26
+ return jsonPatch.compare(bindings, toCompare).filter((op)=>!ignore.some((prefix)=>op.path.startsWith(prefix)));
26
27
  }
27
- const ignore = ["/styles", "/overrides/styles", "/metadata"];
28
- return jsonPatch.compare(bindings, toCompare).filter(op => {
29
- return !ignore.some(prefix => op.path.startsWith(prefix));
30
- });
31
- }
32
28
  }
29
+ export { InputsUpdater };
33
30
 
34
31
  //# sourceMappingURL=InputsUpdater.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["jsonPatch","set","InputsUpdater","constructor","elementId","bindings","operations","applyToDocument","document","inputs","structuredClone","overrides","bp","Object","entries","forEach","operation","apply","createJsonPatch","toCompare","keys","length","ignore","compare","filter","op","some","prefix","path","startsWith"],"sources":["InputsUpdater.ts"],"sourcesContent":["import { jsonPatch } from \"~/jsonPatch.js\";\nimport set from \"lodash/set.js\";\nimport type { Document, DocumentElementBindings } from \"./types.js\";\nimport type { IBindingsUpdater } from \"./IBindingsUpdater.js\";\nimport type { ElementInputsBindings } from \"./InputBindingsProcessor.js\";\nimport type { IDocumentOperation } from \"~/documentOperations/index.js\";\n\nexport class InputsUpdater implements IBindingsUpdater {\n private readonly bindings: ElementInputsBindings;\n private operations: IDocumentOperation[];\n private elementId: string;\n\n constructor(\n elementId: string,\n bindings: ElementInputsBindings,\n operations: IDocumentOperation[]\n ) {\n this.elementId = elementId;\n this.operations = operations;\n this.bindings = bindings;\n }\n\n applyToDocument(document: Document) {\n document.bindings[this.elementId].inputs = structuredClone(this.bindings.inputs);\n\n if (this.bindings.overrides) {\n for (const [bp, overrides] of Object.entries(this.bindings.overrides)) {\n if (overrides.inputs) {\n set(\n document.bindings,\n `${this.elementId}.overrides.${bp}.inputs`,\n structuredClone(this.bindings.overrides[bp].inputs)\n );\n }\n }\n }\n\n this.operations.forEach(operation => operation.apply(document));\n }\n\n createJsonPatch(bindings: DocumentElementBindings) {\n const toCompare: Partial<DocumentElementBindings> = { ...this.bindings };\n if (Object.keys(toCompare.overrides ?? {}).length === 0) {\n delete toCompare.overrides;\n }\n\n const ignore = [\"/styles\", \"/overrides/styles\", \"/metadata\"];\n\n return jsonPatch.compare(bindings, toCompare).filter(op => {\n return !ignore.some(prefix => op.path.startsWith(prefix));\n });\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAClB,OAAOC,GAAG,MAAM,eAAe;AAM/B,OAAO,MAAMC,aAAa,CAA6B;EAKnDC,WAAWA,CACPC,SAAiB,EACjBC,QAA+B,EAC/BC,UAAgC,EAClC;IACE,IAAI,CAACF,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACE,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACD,QAAQ,GAAGA,QAAQ;EAC5B;EAEAE,eAAeA,CAACC,QAAkB,EAAE;IAChCA,QAAQ,CAACH,QAAQ,CAAC,IAAI,CAACD,SAAS,CAAC,CAACK,MAAM,GAAGC,eAAe,CAAC,IAAI,CAACL,QAAQ,CAACI,MAAM,CAAC;IAEhF,IAAI,IAAI,CAACJ,QAAQ,CAACM,SAAS,EAAE;MACzB,KAAK,MAAM,CAACC,EAAE,EAAED,SAAS,CAAC,IAAIE,MAAM,CAACC,OAAO,CAAC,IAAI,CAACT,QAAQ,CAACM,SAAS,CAAC,EAAE;QACnE,IAAIA,SAAS,CAACF,MAAM,EAAE;UAClBR,GAAG,CACCO,QAAQ,CAACH,QAAQ,EACjB,GAAG,IAAI,CAACD,SAAS,cAAcQ,EAAE,SAAS,EAC1CF,eAAe,CAAC,IAAI,CAACL,QAAQ,CAACM,SAAS,CAACC,EAAE,CAAC,CAACH,MAAM,CACtD,CAAC;QACL;MACJ;IACJ;IAEA,IAAI,CAACH,UAAU,CAACS,OAAO,CAACC,SAAS,IAAIA,SAAS,CAACC,KAAK,CAACT,QAAQ,CAAC,CAAC;EACnE;EAEAU,eAAeA,CAACb,QAAiC,EAAE;IAC/C,MAAMc,SAA2C,GAAG;MAAE,GAAG,IAAI,CAACd;IAAS,CAAC;IACxE,IAAIQ,MAAM,CAACO,IAAI,CAACD,SAAS,CAACR,SAAS,IAAI,CAAC,CAAC,CAAC,CAACU,MAAM,KAAK,CAAC,EAAE;MACrD,OAAOF,SAAS,CAACR,SAAS;IAC9B;IAEA,MAAMW,MAAM,GAAG,CAAC,SAAS,EAAE,mBAAmB,EAAE,WAAW,CAAC;IAE5D,OAAOtB,SAAS,CAACuB,OAAO,CAAClB,QAAQ,EAAEc,SAAS,CAAC,CAACK,MAAM,CAACC,EAAE,IAAI;MACvD,OAAO,CAACH,MAAM,CAACI,IAAI,CAACC,MAAM,IAAIF,EAAE,CAACG,IAAI,CAACC,UAAU,CAACF,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"InputsUpdater.js","sources":["../src/InputsUpdater.ts"],"sourcesContent":["import { jsonPatch } from \"~/jsonPatch.js\";\nimport set from \"lodash/set.js\";\nimport type { Document, DocumentElementBindings } from \"./types.js\";\nimport type { IBindingsUpdater } from \"./IBindingsUpdater.js\";\nimport type { ElementInputsBindings } from \"./InputBindingsProcessor.js\";\nimport type { IDocumentOperation } from \"~/documentOperations/index.js\";\n\nexport class InputsUpdater implements IBindingsUpdater {\n private readonly bindings: ElementInputsBindings;\n private operations: IDocumentOperation[];\n private elementId: string;\n\n constructor(\n elementId: string,\n bindings: ElementInputsBindings,\n operations: IDocumentOperation[]\n ) {\n this.elementId = elementId;\n this.operations = operations;\n this.bindings = bindings;\n }\n\n applyToDocument(document: Document) {\n document.bindings[this.elementId].inputs = structuredClone(this.bindings.inputs);\n\n if (this.bindings.overrides) {\n for (const [bp, overrides] of Object.entries(this.bindings.overrides)) {\n if (overrides.inputs) {\n set(\n document.bindings,\n `${this.elementId}.overrides.${bp}.inputs`,\n structuredClone(this.bindings.overrides[bp].inputs)\n );\n }\n }\n }\n\n this.operations.forEach(operation => operation.apply(document));\n }\n\n createJsonPatch(bindings: DocumentElementBindings) {\n const toCompare: Partial<DocumentElementBindings> = { ...this.bindings };\n if (Object.keys(toCompare.overrides ?? {}).length === 0) {\n delete toCompare.overrides;\n }\n\n const ignore = [\"/styles\", \"/overrides/styles\", \"/metadata\"];\n\n return jsonPatch.compare(bindings, toCompare).filter(op => {\n return !ignore.some(prefix => op.path.startsWith(prefix));\n });\n }\n}\n"],"names":["InputsUpdater","elementId","bindings","operations","document","structuredClone","bp","overrides","Object","set","operation","toCompare","ignore","jsonPatch","op","prefix"],"mappings":";;AAOO,MAAMA;IAKT,YACIC,SAAiB,EACjBC,QAA+B,EAC/BC,UAAgC,CAClC;QACE,IAAI,CAAC,SAAS,GAAGF;QACjB,IAAI,CAAC,UAAU,GAAGE;QAClB,IAAI,CAAC,QAAQ,GAAGD;IACpB;IAEA,gBAAgBE,QAAkB,EAAE;QAChCA,SAAS,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAGC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,MAAM;QAE/E,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EACvB;YAAA,KAAK,MAAM,CAACC,IAAIC,UAAU,IAAIC,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAChE,IAAID,UAAU,MAAM,EAChBE,IACIL,SAAS,QAAQ,EACjB,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAEE,GAAG,OAAO,CAAC,EAC1CD,gBAAgB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAACC,GAAG,CAAC,MAAM;QAG9D;QAGJ,IAAI,CAAC,UAAU,CAAC,OAAO,CAACI,CAAAA,YAAaA,UAAU,KAAK,CAACN;IACzD;IAEA,gBAAgBF,QAAiC,EAAE;QAC/C,MAAMS,YAA8C;YAAE,GAAG,IAAI,CAAC,QAAQ;QAAC;QACvE,IAAIH,AAAkD,MAAlDA,OAAO,IAAI,CAACG,UAAU,SAAS,IAAI,CAAC,GAAG,MAAM,EAC7C,OAAOA,UAAU,SAAS;QAG9B,MAAMC,SAAS;YAAC;YAAW;YAAqB;SAAY;QAE5D,OAAOC,UAAU,OAAO,CAACX,UAAUS,WAAW,MAAM,CAACG,CAAAA,KAC1C,CAACF,OAAO,IAAI,CAACG,CAAAA,SAAUD,GAAG,IAAI,CAAC,UAAU,CAACC;IAEzD;AACJ"}
package/LiveSdk.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import type { GetPageOptions, IContentSdk, IDataProvider, ListPagesOptions, PublicPage } from "./types.js";
1
+ import type { GetPageOptions, IContentSdk, IDataProvider, ListPagesOptions, ListPagesResult, PublicPage } from "./types.js";
2
2
  export declare class LiveSdk implements IContentSdk {
3
3
  private dataProvider;
4
4
  constructor(dataProvider: IDataProvider);
5
5
  getPage(path: string, options?: GetPageOptions): Promise<PublicPage | null>;
6
- listPages(options?: ListPagesOptions): Promise<PublicPage[]>;
6
+ listPages(options?: ListPagesOptions): Promise<ListPagesResult>;
7
7
  }
package/LiveSdk.js CHANGED
@@ -1,18 +1,17 @@
1
1
  import { documentStoreManager } from "./DocumentStoreManager.js";
2
- export class LiveSdk {
3
- constructor(dataProvider) {
4
- this.dataProvider = dataProvider;
5
- }
6
- async getPage(path, options) {
7
- const page = await this.dataProvider.getPageByPath(path, options);
8
- if (page) {
9
- documentStoreManager.getStore(page.properties.id).setDocument(page);
2
+ class LiveSdk {
3
+ constructor(dataProvider){
4
+ this.dataProvider = dataProvider;
5
+ }
6
+ async getPage(path, options) {
7
+ const page = await this.dataProvider.getPageByPath(path, options);
8
+ if (page) documentStoreManager.getStore(page.properties.id).setDocument(page);
9
+ return page;
10
+ }
11
+ listPages(options) {
12
+ return this.dataProvider.listPages(options);
10
13
  }
11
- return page;
12
- }
13
- listPages(options) {
14
- return this.dataProvider.listPages(options);
15
- }
16
14
  }
15
+ export { LiveSdk };
17
16
 
18
17
  //# sourceMappingURL=LiveSdk.js.map
package/LiveSdk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["documentStoreManager","LiveSdk","constructor","dataProvider","getPage","path","options","page","getPageByPath","getStore","properties","id","setDocument","listPages"],"sources":["LiveSdk.ts"],"sourcesContent":["import type {\n GetPageOptions,\n IContentSdk,\n IDataProvider,\n ListPagesOptions,\n PublicPage\n} from \"~/types.js\";\nimport { documentStoreManager } from \"~/DocumentStoreManager.js\";\n\nexport class LiveSdk implements IContentSdk {\n private dataProvider: IDataProvider;\n\n constructor(dataProvider: IDataProvider) {\n this.dataProvider = dataProvider;\n }\n\n async getPage(path: string, options?: GetPageOptions): Promise<PublicPage | null> {\n const page = await this.dataProvider.getPageByPath(path, options);\n if (page) {\n documentStoreManager.getStore<PublicPage>(page.properties.id).setDocument(page);\n }\n return page;\n }\n\n listPages(options?: ListPagesOptions): Promise<PublicPage[]> {\n return this.dataProvider.listPages(options);\n }\n}\n"],"mappings":"AAOA,SAASA,oBAAoB;AAE7B,OAAO,MAAMC,OAAO,CAAwB;EAGxCC,WAAWA,CAACC,YAA2B,EAAE;IACrC,IAAI,CAACA,YAAY,GAAGA,YAAY;EACpC;EAEA,MAAMC,OAAOA,CAACC,IAAY,EAAEC,OAAwB,EAA8B;IAC9E,MAAMC,IAAI,GAAG,MAAM,IAAI,CAACJ,YAAY,CAACK,aAAa,CAACH,IAAI,EAAEC,OAAO,CAAC;IACjE,IAAIC,IAAI,EAAE;MACNP,oBAAoB,CAACS,QAAQ,CAAaF,IAAI,CAACG,UAAU,CAACC,EAAE,CAAC,CAACC,WAAW,CAACL,IAAI,CAAC;IACnF;IACA,OAAOA,IAAI;EACf;EAEAM,SAASA,CAACP,OAA0B,EAAyB;IACzD,OAAO,IAAI,CAACH,YAAY,CAACU,SAAS,CAACP,OAAO,CAAC;EAC/C;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"LiveSdk.js","sources":["../src/LiveSdk.ts"],"sourcesContent":["import type {\n GetPageOptions,\n IContentSdk,\n IDataProvider,\n ListPagesOptions,\n ListPagesResult,\n PublicPage\n} from \"~/types.js\";\nimport { documentStoreManager } from \"~/DocumentStoreManager.js\";\n\nexport class LiveSdk implements IContentSdk {\n private dataProvider: IDataProvider;\n\n constructor(dataProvider: IDataProvider) {\n this.dataProvider = dataProvider;\n }\n\n async getPage(path: string, options?: GetPageOptions): Promise<PublicPage | null> {\n const page = await this.dataProvider.getPageByPath(path, options);\n if (page) {\n documentStoreManager.getStore<PublicPage>(page.properties.id).setDocument(page);\n }\n return page;\n }\n\n listPages(options?: ListPagesOptions): Promise<ListPagesResult> {\n return this.dataProvider.listPages(options);\n }\n}\n"],"names":["LiveSdk","dataProvider","path","options","page","documentStoreManager"],"mappings":";AAUO,MAAMA;IAGT,YAAYC,YAA2B,CAAE;QACrC,IAAI,CAAC,YAAY,GAAGA;IACxB;IAEA,MAAM,QAAQC,IAAY,EAAEC,OAAwB,EAA8B;QAC9E,MAAMC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAACF,MAAMC;QACzD,IAAIC,MACAC,qBAAqB,QAAQ,CAAaD,KAAK,UAAU,CAAC,EAAE,EAAE,WAAW,CAACA;QAE9E,OAAOA;IACX;IAEA,UAAUD,OAA0B,EAA4B;QAC5D,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAACA;IACvC;AACJ"}
package/Logger.d.ts CHANGED
@@ -1 +1,2 @@
1
- export declare const logger: import("pino").Logger<never>;
1
+ import pino from "pino";
2
+ export declare const logger: pino.Logger<never, boolean>;
package/Logger.js CHANGED
@@ -1,13 +1,14 @@
1
1
  import pino from "pino";
2
- const isProduction = process.env.NODE_ENV === "production";
3
- export const logger = pino({
4
- name: "Website Builder SDK",
5
- level: isProduction ? "silent" : "debug",
6
- ...(isProduction ? {} : {
7
- transport: {
8
- target: "pino-pretty"
2
+ const isProduction = "production" === process.env.NODE_ENV;
3
+ const logger = pino({
4
+ name: "Website Builder SDK",
5
+ level: isProduction ? "silent" : "debug",
6
+ ...isProduction ? {} : {
7
+ transport: {
8
+ target: "pino-pretty"
9
+ }
9
10
  }
10
- })
11
11
  });
12
+ export { logger };
12
13
 
13
14
  //# sourceMappingURL=Logger.js.map
package/Logger.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["pino","isProduction","process","env","NODE_ENV","logger","name","level","transport","target"],"sources":["Logger.ts"],"sourcesContent":["import pino from \"pino\";\n\nconst isProduction = process.env.NODE_ENV === \"production\";\n\nexport const logger = pino({\n name: \"Website Builder SDK\",\n level: isProduction ? \"silent\" : \"debug\",\n ...(isProduction ? {} : { transport: { target: \"pino-pretty\" } })\n});\n"],"mappings":"AAAA,OAAOA,IAAI,MAAM,MAAM;AAEvB,MAAMC,YAAY,GAAGC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY;AAE1D,OAAO,MAAMC,MAAM,GAAGL,IAAI,CAAC;EACvBM,IAAI,EAAE,qBAAqB;EAC3BC,KAAK,EAAEN,YAAY,GAAG,QAAQ,GAAG,OAAO;EACxC,IAAIA,YAAY,GAAG,CAAC,CAAC,GAAG;IAAEO,SAAS,EAAE;MAAEC,MAAM,EAAE;IAAc;EAAE,CAAC;AACpE,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"Logger.js","sources":["../src/Logger.ts"],"sourcesContent":["import pino from \"pino\";\n\nconst isProduction = process.env.NODE_ENV === \"production\";\n\nexport const logger = pino({\n name: \"Website Builder SDK\",\n level: isProduction ? \"silent\" : \"debug\",\n ...(isProduction ? {} : { transport: { target: \"pino-pretty\" } })\n});\n"],"names":["isProduction","process","logger","pino"],"mappings":";AAEA,MAAMA,eAAeC,AAAyB,iBAAzBA,QAAQ,GAAG,CAAC,QAAQ;AAElC,MAAMC,SAASC,KAAK;IACvB,MAAM;IACN,OAAOH,eAAe,WAAW;IACjC,GAAIA,eAAe,CAAC,IAAI;QAAE,WAAW;YAAE,QAAQ;QAAc;IAAE,CAAC;AACpE"}
package/MouseTracker.js CHANGED
@@ -1,93 +1,87 @@
1
- export class MouseTracker {
2
- latest = null;
3
- lastSent = null;
4
- callbacks = new Set();
5
- frameId = null;
6
- listener = null;
7
- isTracking = false;
8
- constructor(window) {
9
- this.window = window;
10
- }
11
- start() {
12
- if (this.isTracking) {
13
- return;
1
+ class MouseTracker {
2
+ constructor(window1){
3
+ this.latest = null;
4
+ this.lastSent = null;
5
+ this.callbacks = new Set();
6
+ this.frameId = null;
7
+ this.listener = null;
8
+ this.isTracking = false;
9
+ this.window = window1;
14
10
  }
15
- this.isTracking = true;
16
- this.listener = e => {
17
- this.latest = {
18
- x: e.clientX,
19
- y: e.clientY
20
- };
21
- };
22
- this.window.addEventListener("mousemove", this.listener);
23
- const loop = () => {
24
- if (this.latest) {
25
- const {
26
- x,
27
- y
28
- } = this.latest;
29
- if (!this.lastSent || x !== this.lastSent.x || y !== this.lastSent.y) {
30
- this.lastSent = {
31
- x,
32
- y
33
- };
34
- this.callbacks.forEach(cb => cb({
35
- x,
36
- y
37
- }));
11
+ start() {
12
+ if (this.isTracking) return;
13
+ this.isTracking = true;
14
+ this.listener = (e)=>{
15
+ this.latest = {
16
+ x: e.clientX,
17
+ y: e.clientY
18
+ };
19
+ };
20
+ this.window.addEventListener("mousemove", this.listener);
21
+ const loop = ()=>{
22
+ if (this.latest) {
23
+ const { x, y } = this.latest;
24
+ if (!this.lastSent || x !== this.lastSent.x || y !== this.lastSent.y) {
25
+ this.lastSent = {
26
+ x,
27
+ y
28
+ };
29
+ this.callbacks.forEach((cb)=>cb({
30
+ x,
31
+ y
32
+ }));
33
+ }
34
+ }
35
+ this.frameId = this.window.requestAnimationFrame(loop);
36
+ };
37
+ this.frameId = this.window.requestAnimationFrame(loop);
38
+ }
39
+ stop() {
40
+ if (!this.isTracking) return;
41
+ this.isTracking = false;
42
+ if (this.listener) {
43
+ this.window.removeEventListener("mousemove", this.listener);
44
+ this.listener = null;
45
+ }
46
+ if (null !== this.frameId) {
47
+ this.window.cancelAnimationFrame(this.frameId);
48
+ this.frameId = null;
38
49
  }
39
- }
40
- this.frameId = this.window.requestAnimationFrame(loop);
41
- };
42
- this.frameId = this.window.requestAnimationFrame(loop);
43
- }
44
- stop() {
45
- if (!this.isTracking) {
46
- return;
50
+ this.latest = null;
51
+ this.lastSent = null;
52
+ }
53
+ subscribe(cb) {
54
+ this.callbacks.add(cb);
55
+ return ()=>this.callbacks.delete(cb);
47
56
  }
48
- this.isTracking = false;
49
- if (this.listener) {
50
- this.window.removeEventListener("mousemove", this.listener);
51
- this.listener = null;
57
+ get x() {
58
+ return this.latest?.x ?? 0;
52
59
  }
53
- if (this.frameId !== null) {
54
- this.window.cancelAnimationFrame(this.frameId);
55
- this.frameId = null;
60
+ get y() {
61
+ return this.latest?.y ?? 0;
62
+ }
63
+ setPosition(x, y) {
64
+ this.latest = {
65
+ x,
66
+ y
67
+ };
56
68
  }
57
- this.latest = null;
58
- this.lastSent = null;
59
- }
60
- subscribe(cb) {
61
- this.callbacks.add(cb);
62
- return () => this.callbacks.delete(cb);
63
- }
64
- get x() {
65
- return this.latest?.x ?? 0;
66
- }
67
- get y() {
68
- return this.latest?.y ?? 0;
69
- }
70
- setPosition(x, y) {
71
- this.latest = {
72
- x,
73
- y
74
- };
75
- }
76
69
  }
77
70
  class NullMouseTracker {
78
- get x() {
79
- return 0;
80
- }
81
- get y() {
82
- return 0;
83
- }
84
- setPosition() {}
85
- start() {}
86
- stop() {}
87
- subscribe() {
88
- return function () {};
89
- }
71
+ get x() {
72
+ return 0;
73
+ }
74
+ get y() {
75
+ return 0;
76
+ }
77
+ setPosition() {}
78
+ start() {}
79
+ stop() {}
80
+ subscribe() {
81
+ return function() {};
82
+ }
90
83
  }
91
- export const mouseTracker = typeof window !== "undefined" ? new MouseTracker(window) : new NullMouseTracker();
84
+ const mouseTracker = "u" > typeof window ? new MouseTracker(window) : new NullMouseTracker();
85
+ export { MouseTracker, mouseTracker };
92
86
 
93
87
  //# sourceMappingURL=MouseTracker.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MouseTracker","latest","lastSent","callbacks","Set","frameId","listener","isTracking","constructor","window","start","e","x","clientX","y","clientY","addEventListener","loop","forEach","cb","requestAnimationFrame","stop","removeEventListener","cancelAnimationFrame","subscribe","add","delete","setPosition","NullMouseTracker","mouseTracker"],"sources":["MouseTracker.ts"],"sourcesContent":["type MousePosition = { x: number; y: number };\ntype MousePositionCallback = (pos: MousePosition) => void;\n\ninterface IMouseTracker {\n get x(): number;\n get y(): number;\n start(): void;\n stop(): void;\n subscribe(cb: MousePositionCallback): () => void;\n setPosition(x: number, y: number): void;\n}\n\nexport class MouseTracker implements IMouseTracker {\n private latest: MousePosition | null = null;\n private lastSent: MousePosition | null = null;\n private callbacks = new Set<MousePositionCallback>();\n private frameId: number | null = null;\n private listener: ((e: MouseEvent) => void) | null = null;\n private isTracking = false;\n private readonly window: Window;\n\n constructor(window: Window) {\n this.window = window;\n }\n\n start() {\n if (this.isTracking) {\n return;\n }\n\n this.isTracking = true;\n\n this.listener = (e: MouseEvent) => {\n this.latest = { x: e.clientX, y: e.clientY };\n };\n\n this.window.addEventListener(\"mousemove\", this.listener);\n\n const loop = () => {\n if (this.latest) {\n const { x, y } = this.latest;\n if (!this.lastSent || x !== this.lastSent.x || y !== this.lastSent.y) {\n this.lastSent = { x, y };\n this.callbacks.forEach(cb => cb({ x, y }));\n }\n }\n this.frameId = this.window.requestAnimationFrame(loop);\n };\n\n this.frameId = this.window.requestAnimationFrame(loop);\n }\n\n stop() {\n if (!this.isTracking) {\n return;\n }\n\n this.isTracking = false;\n\n if (this.listener) {\n this.window.removeEventListener(\"mousemove\", this.listener);\n this.listener = null;\n }\n\n if (this.frameId !== null) {\n this.window.cancelAnimationFrame(this.frameId);\n this.frameId = null;\n }\n\n this.latest = null;\n this.lastSent = null;\n }\n\n subscribe(cb: MousePositionCallback): () => void {\n this.callbacks.add(cb);\n return () => this.callbacks.delete(cb);\n }\n\n get x(): number {\n return this.latest?.x ?? 0;\n }\n\n get y(): number {\n return this.latest?.y ?? 0;\n }\n\n setPosition(x: number, y: number) {\n this.latest = { x, y };\n }\n}\n\nclass NullMouseTracker implements IMouseTracker {\n get x(): number {\n return 0;\n }\n\n get y(): number {\n return 0;\n }\n\n setPosition(): void {}\n\n start(): void {}\n\n stop(): void {}\n\n subscribe(): () => void {\n return function () {};\n }\n}\n\nexport const mouseTracker =\n typeof window !== \"undefined\" ? new MouseTracker(window) : new NullMouseTracker();\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MouseTracker.js","sources":["../src/MouseTracker.ts"],"sourcesContent":["type MousePosition = { x: number; y: number };\ntype MousePositionCallback = (pos: MousePosition) => void;\n\ninterface IMouseTracker {\n get x(): number;\n get y(): number;\n start(): void;\n stop(): void;\n subscribe(cb: MousePositionCallback): () => void;\n setPosition(x: number, y: number): void;\n}\n\nexport class MouseTracker implements IMouseTracker {\n private latest: MousePosition | null = null;\n private lastSent: MousePosition | null = null;\n private callbacks = new Set<MousePositionCallback>();\n private frameId: number | null = null;\n private listener: ((e: MouseEvent) => void) | null = null;\n private isTracking = false;\n private readonly window: Window;\n\n constructor(window: Window) {\n this.window = window;\n }\n\n start() {\n if (this.isTracking) {\n return;\n }\n\n this.isTracking = true;\n\n this.listener = (e: MouseEvent) => {\n this.latest = { x: e.clientX, y: e.clientY };\n };\n\n this.window.addEventListener(\"mousemove\", this.listener);\n\n const loop = () => {\n if (this.latest) {\n const { x, y } = this.latest;\n if (!this.lastSent || x !== this.lastSent.x || y !== this.lastSent.y) {\n this.lastSent = { x, y };\n this.callbacks.forEach(cb => cb({ x, y }));\n }\n }\n this.frameId = this.window.requestAnimationFrame(loop);\n };\n\n this.frameId = this.window.requestAnimationFrame(loop);\n }\n\n stop() {\n if (!this.isTracking) {\n return;\n }\n\n this.isTracking = false;\n\n if (this.listener) {\n this.window.removeEventListener(\"mousemove\", this.listener);\n this.listener = null;\n }\n\n if (this.frameId !== null) {\n this.window.cancelAnimationFrame(this.frameId);\n this.frameId = null;\n }\n\n this.latest = null;\n this.lastSent = null;\n }\n\n subscribe(cb: MousePositionCallback): () => void {\n this.callbacks.add(cb);\n return () => this.callbacks.delete(cb);\n }\n\n get x(): number {\n return this.latest?.x ?? 0;\n }\n\n get y(): number {\n return this.latest?.y ?? 0;\n }\n\n setPosition(x: number, y: number) {\n this.latest = { x, y };\n }\n}\n\nclass NullMouseTracker implements IMouseTracker {\n get x(): number {\n return 0;\n }\n\n get y(): number {\n return 0;\n }\n\n setPosition(): void {}\n\n start(): void {}\n\n stop(): void {}\n\n subscribe(): () => void {\n return function () {};\n }\n}\n\nexport const mouseTracker =\n typeof window !== \"undefined\" ? new MouseTracker(window) : new NullMouseTracker();\n"],"names":["MouseTracker","window1","Set","e","loop","x","y","cb","NullMouseTracker","mouseTracker","window"],"mappings":"AAYO,MAAMA;IAST,YAAYC,OAAc,CAAE;aARpB,MAAM,GAAyB;aAC/B,QAAQ,GAAyB;aACjC,SAAS,GAAG,IAAIC;aAChB,OAAO,GAAkB;aACzB,QAAQ,GAAqC;aAC7C,UAAU,GAAG;QAIjB,IAAI,CAAC,MAAM,GAAGD;IAClB;IAEA,QAAQ;QACJ,IAAI,IAAI,CAAC,UAAU,EACf;QAGJ,IAAI,CAAC,UAAU,GAAG;QAElB,IAAI,CAAC,QAAQ,GAAG,CAACE;YACb,IAAI,CAAC,MAAM,GAAG;gBAAE,GAAGA,EAAE,OAAO;gBAAE,GAAGA,EAAE,OAAO;YAAC;QAC/C;QAEA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,IAAI,CAAC,QAAQ;QAEvD,MAAMC,OAAO;YACT,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,MAAM,EAAEC,CAAC,EAAEC,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM;gBAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAID,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAIC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE;oBAClE,IAAI,CAAC,QAAQ,GAAG;wBAAED;wBAAGC;oBAAE;oBACvB,IAAI,CAAC,SAAS,CAAC,OAAO,CAACC,CAAAA,KAAMA,GAAG;4BAAEF;4BAAGC;wBAAE;gBAC3C;YACJ;YACA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAACF;QACrD;QAEA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAACA;IACrD;IAEA,OAAO;QACH,IAAI,CAAC,IAAI,CAAC,UAAU,EAChB;QAGJ,IAAI,CAAC,UAAU,GAAG;QAElB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,aAAa,IAAI,CAAC,QAAQ;YAC1D,IAAI,CAAC,QAAQ,GAAG;QACpB;QAEA,IAAI,AAAiB,SAAjB,IAAI,CAAC,OAAO,EAAW;YACvB,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO;YAC7C,IAAI,CAAC,OAAO,GAAG;QACnB;QAEA,IAAI,CAAC,MAAM,GAAG;QACd,IAAI,CAAC,QAAQ,GAAG;IACpB;IAEA,UAAUG,EAAyB,EAAc;QAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,CAACA;QACnB,OAAO,IAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAACA;IACvC;IAEA,IAAI,IAAY;QACZ,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK;IAC7B;IAEA,IAAI,IAAY;QACZ,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK;IAC7B;IAEA,YAAYF,CAAS,EAAEC,CAAS,EAAE;QAC9B,IAAI,CAAC,MAAM,GAAG;YAAED;YAAGC;QAAE;IACzB;AACJ;AAEA,MAAME;IACF,IAAI,IAAY;QACZ,OAAO;IACX;IAEA,IAAI,IAAY;QACZ,OAAO;IACX;IAEA,cAAoB,CAAC;IAErB,QAAc,CAAC;IAEf,OAAa,CAAC;IAEd,YAAwB;QACpB,OAAO,YAAa;IACxB;AACJ;AAEO,MAAMC,eACT,AAAkB,MAAlB,OAAOC,SAAyB,IAAIV,aAAaU,UAAU,IAAIF"}
package/NullSdk.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- import type { IContentSdk, Page, PublicRedirect, ResolvedComponent } from "./types.js";
1
+ import type { IContentSdk, ListPagesResult, PublicRedirect, ResolvedComponent } from "./types.js";
2
+ import type { PublicPage } from "./types.js";
2
3
  export declare class NullSdk implements IContentSdk {
3
- getPage(): Promise<Page | null>;
4
- listPages(): Promise<Page[]>;
4
+ getPage(): Promise<PublicPage | null>;
5
+ listPages(): Promise<ListPagesResult>;
5
6
  listRedirects(): Promise<PublicRedirect[]>;
6
7
  registerComponent(): void;
7
8
  resolveElement(): ResolvedComponent[] | null;
package/NullSdk.js CHANGED
@@ -1,17 +1,25 @@
1
- export class NullSdk {
2
- async getPage() {
3
- return null;
4
- }
5
- listPages() {
6
- return Promise.resolve([]);
7
- }
8
- listRedirects() {
9
- return Promise.resolve([]);
10
- }
11
- registerComponent() {}
12
- resolveElement() {
13
- return null;
14
- }
1
+ class NullSdk {
2
+ async getPage() {
3
+ return null;
4
+ }
5
+ listPages() {
6
+ return Promise.resolve({
7
+ data: [],
8
+ meta: {
9
+ hasMoreItems: false,
10
+ totalCount: 0,
11
+ cursor: null
12
+ }
13
+ });
14
+ }
15
+ listRedirects() {
16
+ return Promise.resolve([]);
17
+ }
18
+ registerComponent() {}
19
+ resolveElement() {
20
+ return null;
21
+ }
15
22
  }
23
+ export { NullSdk };
16
24
 
17
25
  //# sourceMappingURL=NullSdk.js.map
package/NullSdk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["NullSdk","getPage","listPages","Promise","resolve","listRedirects","registerComponent","resolveElement"],"sources":["NullSdk.ts"],"sourcesContent":["import type { IContentSdk, Page, PublicRedirect, ResolvedComponent } from \"./types.js\";\n\nexport class NullSdk implements IContentSdk {\n async getPage(): Promise<Page | null> {\n return null;\n }\n\n listPages(): Promise<Page[]> {\n return Promise.resolve([]);\n }\n\n listRedirects(): Promise<PublicRedirect[]> {\n return Promise.resolve([]);\n }\n\n registerComponent(): void {}\n\n resolveElement(): ResolvedComponent[] | null {\n return null;\n }\n}\n"],"mappings":"AAEA,OAAO,MAAMA,OAAO,CAAwB;EACxC,MAAMC,OAAOA,CAAA,EAAyB;IAClC,OAAO,IAAI;EACf;EAEAC,SAASA,CAAA,EAAoB;IACzB,OAAOC,OAAO,CAACC,OAAO,CAAC,EAAE,CAAC;EAC9B;EAEAC,aAAaA,CAAA,EAA8B;IACvC,OAAOF,OAAO,CAACC,OAAO,CAAC,EAAE,CAAC;EAC9B;EAEAE,iBAAiBA,CAAA,EAAS,CAAC;EAE3BC,cAAcA,CAAA,EAA+B;IACzC,OAAO,IAAI;EACf;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"NullSdk.js","sources":["../src/NullSdk.ts"],"sourcesContent":["import type { IContentSdk, ListPagesResult, PublicRedirect, ResolvedComponent } from \"./types.js\";\nimport type { PublicPage } from \"./types.js\";\n\nexport class NullSdk implements IContentSdk {\n async getPage(): Promise<PublicPage | null> {\n return null;\n }\n\n listPages(): Promise<ListPagesResult> {\n return Promise.resolve({\n data: [],\n meta: { hasMoreItems: false, totalCount: 0, cursor: null }\n });\n }\n\n listRedirects(): Promise<PublicRedirect[]> {\n return Promise.resolve([]);\n }\n\n registerComponent(): void {}\n\n resolveElement(): ResolvedComponent[] | null {\n return null;\n }\n}\n"],"names":["NullSdk","Promise"],"mappings":"AAGO,MAAMA;IACT,MAAM,UAAsC;QACxC,OAAO;IACX;IAEA,YAAsC;QAClC,OAAOC,QAAQ,OAAO,CAAC;YACnB,MAAM,EAAE;YACR,MAAM;gBAAE,cAAc;gBAAO,YAAY;gBAAG,QAAQ;YAAK;QAC7D;IACJ;IAEA,gBAA2C;QACvC,OAAOA,QAAQ,OAAO,CAAC,EAAE;IAC7B;IAEA,oBAA0B,CAAC;IAE3B,iBAA6C;QACzC,OAAO;IACX;AACJ"}
@@ -1,6 +1,7 @@
1
1
  export declare class PreviewDocument {
2
2
  readonly props: Record<string, string>;
3
3
  private constructor();
4
+ static createFromParams(params: string): PreviewDocument;
4
5
  static createFromWindow(): PreviewDocument;
5
6
  static createFromHeaders(): Promise<PreviewDocument>;
6
7
  matches(params: Record<string, string>): boolean;
@@ -1,35 +1,35 @@
1
1
  import { getHeadersProvider } from "./headersProvider.js";
2
- export class PreviewDocument {
3
- constructor(prefix, query) {
4
- this.props = {};
5
- query.forEach((value, key) => {
6
- if (key.startsWith(prefix + ".")) {
7
- const strippedKey = key.slice(prefix.length + 1); // +1 for the dot
8
- this.props[strippedKey] = value;
9
- }
10
- });
11
- }
12
- static createFromWindow() {
13
- const query = new URLSearchParams(window.location.search);
14
- return new PreviewDocument("wb", query);
15
- }
16
- static async createFromHeaders() {
17
- const headersProvider = getHeadersProvider();
18
- const headers = await headersProvider();
19
- const previewFromHeaders = headers.get("X-Preview-Params");
20
- return new PreviewDocument("wb", new URLSearchParams(previewFromHeaders ?? ""));
21
- }
22
- matches(params) {
23
- for (const [key, value] of Object.entries(params)) {
24
- if (this.props[key] !== value) {
25
- return false;
26
- }
2
+ class PreviewDocument {
3
+ constructor(prefix, query){
4
+ this.props = {};
5
+ query.forEach((value, key)=>{
6
+ if (key.startsWith(prefix + ".")) {
7
+ const strippedKey = key.slice(prefix.length + 1);
8
+ this.props[strippedKey] = value;
9
+ }
10
+ });
11
+ }
12
+ static createFromParams(params) {
13
+ return new PreviewDocument("wb", new URLSearchParams(params));
14
+ }
15
+ static createFromWindow() {
16
+ const query = new URLSearchParams(window.location.search);
17
+ return new PreviewDocument("wb", query);
18
+ }
19
+ static async createFromHeaders() {
20
+ const headersProvider = getHeadersProvider();
21
+ const headers = await headersProvider();
22
+ const previewFromHeaders = headers.get("X-Preview-Params");
23
+ return new PreviewDocument("wb", new URLSearchParams(previewFromHeaders ?? ""));
24
+ }
25
+ matches(params) {
26
+ for (const [key, value] of Object.entries(params))if (this.props[key] !== value) return false;
27
+ return true;
28
+ }
29
+ getId() {
30
+ return this.props.id;
27
31
  }
28
- return true;
29
- }
30
- getId() {
31
- return this.props.id;
32
- }
33
32
  }
33
+ export { PreviewDocument };
34
34
 
35
35
  //# sourceMappingURL=PreviewDocument.js.map