@webiny/app-website-builder 6.5.0-beta.1 → 6.5.0-beta.11

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 (153) hide show
  1. package/BaseEditor/config/Sidebar/Tab.d.ts +0 -4
  2. package/BaseEditor/config/Sidebar/Tab.js +5 -21
  3. package/BaseEditor/config/Sidebar/Tab.js.map +1 -1
  4. package/BaseEditor/defaultConfig/Content/AddressBar/PreviewDomain.js +6 -66
  5. package/BaseEditor/defaultConfig/Content/AddressBar/PreviewDomain.js.map +1 -1
  6. package/BaseEditor/defaultConfig/Content/Preview/DropZoneManager.js.map +1 -1
  7. package/BaseEditor/defaultConfig/Content/Preview/Iframe.d.ts +2 -2
  8. package/BaseEditor/defaultConfig/Content/Preview/Overlays/ElementOverlays.d.ts +2 -2
  9. package/BaseEditor/defaultConfig/Content/Preview/PreviewContainer.js +1 -1
  10. package/BaseEditor/defaultConfig/Content/Preview/PreviewContainer.js.map +1 -1
  11. package/BaseEditor/defaultConfig/Content/usePreviewDomain.d.ts +1 -6
  12. package/BaseEditor/defaultConfig/Content/usePreviewDomain.js +1 -26
  13. package/BaseEditor/defaultConfig/DocumentStateEditor/DocumentStateEditor.d.ts +2 -2
  14. package/BaseEditor/defaultConfig/ElementInputRenderers.js +12 -0
  15. package/BaseEditor/defaultConfig/ElementInputRenderers.js.map +1 -1
  16. package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettingsGroup.js +2 -5
  17. package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettingsGroup.js.map +1 -1
  18. package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.d.ts +22 -0
  19. package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.js +17 -0
  20. package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.js.map +1 -0
  21. package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.test.d.ts +1 -0
  22. package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.test.js +64 -0
  23. package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.test.js.map +1 -0
  24. package/BaseEditor/defaultConfig/Sidebar/ElementSettings/useInputValue.js +7 -2
  25. package/BaseEditor/defaultConfig/Sidebar/ElementSettings/useInputValue.js.map +1 -1
  26. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundColor.d.ts +6 -2
  27. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.d.ts +6 -2
  28. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.js +8 -1
  29. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.js.map +1 -1
  30. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundPosition.d.ts +6 -2
  31. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundScaling.d.ts +6 -2
  32. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderColor.d.ts +2 -2
  33. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderRadius.d.ts +2 -2
  34. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderStyle.d.ts +2 -2
  35. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderWidth.d.ts +2 -2
  36. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/Alignment.d.ts +6 -2
  37. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/LengthWithUnitInput.d.ts +2 -2
  38. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Margin.d.ts +2 -2
  39. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Padding.d.ts +2 -2
  40. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Visibility/Visibility.d.ts +2 -2
  41. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/SidebarRow.js +1 -1
  42. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/SidebarRow.js.map +1 -1
  43. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleSettingsGroup.js +2 -5
  44. package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleSettingsGroup.js.map +1 -1
  45. package/BaseEditor/defaultConfig/Toolbar/Navigator/Navigator.d.ts +2 -2
  46. package/DocumentEditor/DocumentEditor.d.ts +2 -2
  47. package/DocumentEditor/StateInspector.d.ts +4 -2
  48. package/Extension.js +3 -0
  49. package/Extension.js.map +1 -1
  50. package/domain/Page/Page.d.ts +2 -0
  51. package/domain/Page/Page.js +1 -0
  52. package/domain/Page/Page.js.map +1 -1
  53. package/domain/PageRevision/PageRevision.d.ts +11 -0
  54. package/domain/PageRevision/PageRevision.js +20 -0
  55. package/domain/PageRevision/PageRevision.js.map +1 -1
  56. package/ecommerce/components/ResourcePage.d.ts +6 -2
  57. package/ecommerce/components/ResourcesList.d.ts +4 -4
  58. package/ecommerce/components/ResourcesPicker.d.ts +9 -4
  59. package/editorSdk/CommandBus.js.map +1 -1
  60. package/features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.js +41 -1
  61. package/features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.js.map +1 -1
  62. package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.d.ts +3 -2
  63. package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.js +8 -2
  64. package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.js.map +1 -1
  65. package/features/pages/deletePageRevision/DeletePageRevision.test.d.ts +1 -0
  66. package/features/pages/deletePageRevision/DeletePageRevision.test.js +67 -0
  67. package/features/pages/deletePageRevision/DeletePageRevision.test.js.map +1 -0
  68. package/features/pages/deletePageRevision/DeletePageRevisionGateway.d.ts +1 -1
  69. package/features/pages/deletePageRevision/DeletePageRevisionGateway.js +2 -3
  70. package/features/pages/deletePageRevision/DeletePageRevisionGateway.js.map +1 -1
  71. package/features/pages/deletePageRevision/DeletePageRevisionRepository.d.ts +4 -2
  72. package/features/pages/deletePageRevision/DeletePageRevisionRepository.js +7 -3
  73. package/features/pages/deletePageRevision/DeletePageRevisionRepository.js.map +1 -1
  74. package/features/pages/deletePageRevision/DeletePageRevisionUseCase.js +1 -1
  75. package/features/pages/deletePageRevision/DeletePageRevisionUseCase.js.map +1 -1
  76. package/features/pages/deletePageRevision/abstractions.d.ts +2 -3
  77. package/features/pages/deletePageRevision/abstractions.js.map +1 -1
  78. package/features/pages/getPage/PageGatewayDto.d.ts +2 -0
  79. package/features/pages/publishPage/PublishPage.test.js +41 -1
  80. package/features/pages/publishPage/PublishPage.test.js.map +1 -1
  81. package/features/pages/publishPage/PublishPageRepository.d.ts +3 -2
  82. package/features/pages/publishPage/PublishPageRepository.js +15 -4
  83. package/features/pages/publishPage/PublishPageRepository.js.map +1 -1
  84. package/features/pages/shared/pageGraphQLFields.js +1 -0
  85. package/features/pages/shared/pageGraphQLFields.js.map +1 -1
  86. package/features/pages/unpublishPage/UnpublishPage.test.js +4 -1
  87. package/features/pages/unpublishPage/UnpublishPage.test.js.map +1 -1
  88. package/features/pages/unpublishPage/UnpublishPageRepository.d.ts +3 -2
  89. package/features/pages/unpublishPage/UnpublishPageRepository.js +12 -4
  90. package/features/pages/unpublishPage/UnpublishPageRepository.js.map +1 -1
  91. package/inputRenderers/DateTimeInput.d.ts +9 -0
  92. package/inputRenderers/DateTimeInput.js +21 -0
  93. package/inputRenderers/DateTimeInput.js.map +1 -0
  94. package/inputRenderers/DateTimeInput.test.d.ts +1 -0
  95. package/inputRenderers/DateTimeInput.test.js +27 -0
  96. package/inputRenderers/DateTimeInput.test.js.map +1 -0
  97. package/inputRenderers/RadioInput.d.ts +3 -0
  98. package/inputRenderers/RadioInput.js +20 -0
  99. package/inputRenderers/RadioInput.js.map +1 -0
  100. package/inputRenderers/TagsInput.d.ts +3 -0
  101. package/inputRenderers/TagsInput.js +22 -0
  102. package/inputRenderers/TagsInput.js.map +1 -0
  103. package/package.json +31 -31
  104. package/presentation/pages/CreatePage/CreatePageDialog.d.ts +2 -2
  105. package/presentation/pages/PageEditor/Revisions/RevisionListDrawer.js +4 -0
  106. package/presentation/pages/PageEditor/Revisions/RevisionListDrawer.js.map +1 -1
  107. package/presentation/pages/PageEditor/Revisions/RevisionListItem.d.ts +3 -3
  108. package/presentation/pages/PageEditor/Revisions/RevisionListItem.js +9 -20
  109. package/presentation/pages/PageEditor/Revisions/RevisionListItem.js.map +1 -1
  110. package/presentation/pages/PageEditor/Revisions/RevisionsList.js +7 -19
  111. package/presentation/pages/PageEditor/Revisions/RevisionsList.js.map +1 -1
  112. package/presentation/pages/PageEditor/Revisions/useRevision.d.ts +1 -1
  113. package/presentation/pages/PageEditor/Revisions/useRevision.js +84 -14
  114. package/presentation/pages/PageEditor/Revisions/useRevision.js.map +1 -1
  115. package/presentation/pages/PageEditor/Revisions/useRevisionList.d.ts +3 -0
  116. package/presentation/pages/PageEditor/Revisions/useRevisionList.js +31 -0
  117. package/presentation/pages/PageEditor/Revisions/useRevisionList.js.map +1 -0
  118. package/presentation/pages/PageEditor/TopBar/PageSettingsDrawer.d.ts +2 -2
  119. package/presentation/pages/PageEditor/TopBar/RevisionsMenu.js +7 -19
  120. package/presentation/pages/PageEditor/TopBar/RevisionsMenu.js.map +1 -1
  121. package/presentation/pages/PageList/PageListPresenter.test.js +3 -1
  122. package/presentation/pages/PageList/PageListPresenter.test.js.map +1 -1
  123. package/presentation/pages/PageList/components/BulkActions/BulkActionDelete.d.ts +2 -2
  124. package/presentation/pages/PageList/components/BulkActions/BulkActionDuplicate.d.ts +2 -2
  125. package/presentation/pages/PageList/components/BulkActions/BulkActionMovePage.d.ts +2 -2
  126. package/presentation/pages/PageList/components/BulkActions/BulkActionPublish.d.ts +2 -2
  127. package/presentation/pages/PageList/components/BulkActions/BulkActionUnpublish.d.ts +2 -2
  128. package/presentation/pages/PageList/components/DocumentList.d.ts +2 -2
  129. package/presentation/pages/PageList/components/Table/Table.d.ts +2 -2
  130. package/presentation/pages/RevisionList/RevisionListPresenter.d.ts +27 -0
  131. package/presentation/pages/RevisionList/RevisionListPresenter.js +73 -0
  132. package/presentation/pages/RevisionList/RevisionListPresenter.js.map +1 -0
  133. package/presentation/pages/RevisionList/RevisionListPresenter.test.d.ts +1 -0
  134. package/presentation/pages/RevisionList/RevisionListPresenter.test.js +219 -0
  135. package/presentation/pages/RevisionList/RevisionListPresenter.test.js.map +1 -0
  136. package/presentation/pages/RevisionList/abstractions.d.ts +34 -0
  137. package/presentation/pages/RevisionList/abstractions.js +5 -0
  138. package/presentation/pages/RevisionList/abstractions.js.map +1 -0
  139. package/presentation/pages/RevisionList/feature.d.ts +3 -0
  140. package/presentation/pages/RevisionList/feature.js +17 -0
  141. package/presentation/pages/RevisionList/feature.js.map +1 -0
  142. package/presentation/pages/RevisionList/index.d.ts +2 -0
  143. package/presentation/pages/RevisionList/index.js +1 -0
  144. package/presentation/pages/TrashBin/WbTrashBin.d.ts +2 -2
  145. package/presentation/redirects/RedirectList/RedirectListPresenter.js.map +1 -1
  146. package/presentation/redirects/RedirectList/RedirectListPresenter.test.js.map +1 -1
  147. package/presentation/redirects/RedirectList/components/BulkActionDelete.d.ts +2 -2
  148. package/presentation/redirects/RedirectList/components/BulkActionMove.d.ts +2 -2
  149. package/presentation/redirects/RedirectList/components/CreateRedirectDialog.d.ts +2 -2
  150. package/presentation/redirects/RedirectList/components/DocumentList.d.ts +2 -2
  151. package/presentation/redirects/RedirectList/components/EditRedirectDialog.d.ts +2 -2
  152. package/presentation/redirects/RedirectList/components/Table/Table.d.ts +2 -2
  153. package/BaseEditor/defaultConfig/Content/usePreviewDomain.js.map +0 -1
@@ -20,8 +20,12 @@ interface ResourcePickerRendererConfig {
20
20
  }
21
21
  export declare function createResourcePickerRenderer(config: ResourcePickerRendererConfig): (({ field }: {
22
22
  field: IFieldVM;
23
- }) => React.JSX.Element) & {
24
- displayName: string;
23
+ }) => React.JSX.Element) & React.NamedExoticComponent<{
24
+ field: IFieldVM;
25
+ }> & {
26
+ readonly type: ({ field }: {
27
+ field: IFieldVM;
28
+ }) => React.JSX.Element;
25
29
  };
26
30
  export interface EcommerceResourcePageTypeConfig {
27
31
  name: string;
@@ -9,9 +9,9 @@ export type PickResourceListProps = {
9
9
  resourceName: string;
10
10
  pluginName: string;
11
11
  };
12
- export declare const PickResourceList: ((props: PickResourceListProps) => React.JSX.Element) & {
13
- displayName: string;
12
+ export declare const PickResourceList: ((props: PickResourceListProps) => React.JSX.Element) & React.NamedExoticComponent<PickResourceListProps> & {
13
+ readonly type: (props: PickResourceListProps) => React.JSX.Element;
14
14
  };
15
- export declare const PickResourcesListButton: ((props: Omit<PickResourceListProps, "onDone">) => React.JSX.Element) & {
16
- displayName: string;
15
+ export declare const PickResourcesListButton: ((props: Omit<PickResourceListProps, "onDone">) => React.JSX.Element) & React.NamedExoticComponent<Omit<PickResourceListProps, "onDone">> & {
16
+ readonly type: (props: Omit<PickResourceListProps, "onDone">) => React.JSX.Element;
17
17
  };
@@ -24,8 +24,8 @@ export interface ResourcePreviewCellProps {
24
24
  onClick?: () => void;
25
25
  style?: Partial<CSSStyleDeclaration>;
26
26
  }
27
- export declare const ResourcePreviewCell: ((props: ResourcePreviewCellProps) => React.JSX.Element) & {
28
- displayName: string;
27
+ export declare const ResourcePreviewCell: ((props: ResourcePreviewCellProps) => React.JSX.Element) & React.NamedExoticComponent<ResourcePreviewCellProps> & {
28
+ readonly type: (props: ResourcePreviewCellProps) => React.JSX.Element;
29
29
  };
30
30
  export type ResourcePickerProps = CustomResourcePickerProps<Resource> & {
31
31
  api: CommerceAPIOperations;
@@ -33,7 +33,12 @@ export type ResourcePickerProps = CustomResourcePickerProps<Resource> & {
33
33
  omitIds?: string[];
34
34
  title?: string;
35
35
  };
36
- export declare const ResourcePicker: ((props: ResourcePickerProps) => React.JSX.Element) & {
37
- displayName: string;
36
+ export declare const ResourcePicker: ((props: ResourcePickerProps) => React.JSX.Element) & React.NamedExoticComponent<CustomResourcePickerProps<Resource> & {
37
+ api: CommerceAPIOperations;
38
+ resourceName: string;
39
+ omitIds?: string[];
40
+ title?: string;
41
+ }> & {
42
+ readonly type: (props: ResourcePickerProps) => React.JSX.Element;
38
43
  };
39
44
  export declare const ResourcesPickerButton: React.FC<ResourcesPickerButtonProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"editorSdk/CommandBus.js","sources":["../../src/editorSdk/CommandBus.ts"],"sourcesContent":["import type { Command } from \"./createCommand.js\";\nexport * from \"./createCommand.js\";\n\nconst INTERNAL_STOP = Symbol(\"INTERNAL_STOP\");\n\nexport type CommandHandler<T> = (\n payload: T,\n control: CommandHandlerControl\n) => void | typeof INTERNAL_STOP | Promise<void | typeof INTERNAL_STOP>;\n\nexport type CommandHandlerControl = {\n stop: () => typeof INTERNAL_STOP;\n};\n\nexport enum CommandPriority {\n LOW = -100,\n NORMAL = 0,\n HIGH = 100,\n CRITICAL = 1000\n}\n\nexport class CommandBus {\n private handlers = new Map<\n string,\n { priority: number; handler: (payload: any, control: CommandHandlerControl) => any }[]\n >();\n\n private middleware: ((\n type: string,\n payload: any,\n next: (payload: any) => Promise<void>\n ) => Promise<void>)[] = [];\n\n register<T>(\n command: Command<T>,\n handler: CommandHandler<T>,\n priority: CommandPriority = CommandPriority.NORMAL\n ): () => void {\n const list = this.handlers.get(command.type) ?? [];\n\n const entry = { handler, priority };\n list.push(entry);\n list.sort((a, b) => b.priority - a.priority);\n this.handlers.set(command.type, list);\n\n // Return an unregister function\n return () => {\n const current = this.handlers.get(command.type);\n if (!current) {\n return;\n }\n\n const index = current.indexOf(entry);\n\n if (index !== -1) {\n current.splice(index, 1);\n }\n\n if (current.length === 0) {\n this.handlers.delete(command.type);\n }\n };\n }\n\n use(mw: (type: string, payload: any, next: (payload: any) => Promise<void>) => Promise<void>) {\n this.middleware.push(mw);\n }\n\n async execute<T>(command: Command<T>, payload?: T) {\n const list = this.handlers.get(command.type) ?? [];\n\n const runHandlers = async (p?: T) => {\n const control: CommandHandlerControl = {\n stop: () => INTERNAL_STOP\n };\n\n for (const entry of list) {\n const result = await entry.handler(p, control);\n if (result === INTERNAL_STOP) {\n break;\n }\n }\n };\n\n const composed = this.middleware.reduceRight(\n (next, mw) => async (p?: T) => mw(command.type, p, next),\n runHandlers\n );\n\n // console.log(\"[Execute Command]\", command.type, payload);\n await composed(payload);\n }\n}\n"],"names":["INTERNAL_STOP","Symbol","CommandPriority","CommandBus","command","handler","priority","list","entry","a","b","current","index","mw","payload","runHandlers","p","control","result","composed","next","Map"],"mappings":";AAGA,MAAMA,gBAAgBC,OAAO;AAWtB,IAAKC,6BAAeA,WAAAA,GAAAA,SAAfA,eAAe;;;;;WAAfA;;AAOL,MAAMC;IAYT,SACIC,OAAmB,EACnBC,OAA0B,EAC1BC,WAAAA,CAAkD,EACxC;QACV,MAAMC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACH,QAAQ,IAAI,KAAK,EAAE;QAElD,MAAMI,QAAQ;YAAEH;YAASC;QAAS;QAClCC,KAAK,IAAI,CAACC;QACVD,KAAK,IAAI,CAAC,CAACE,GAAGC,IAAMA,EAAE,QAAQ,GAAGD,EAAE,QAAQ;QAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACL,QAAQ,IAAI,EAAEG;QAGhC,OAAO;YACH,MAAMI,UAAU,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACP,QAAQ,IAAI;YAC9C,IAAI,CAACO,SACD;YAGJ,MAAMC,QAAQD,QAAQ,OAAO,CAACH;YAE9B,IAAII,AAAU,OAAVA,OACAD,QAAQ,MAAM,CAACC,OAAO;YAG1B,IAAID,AAAmB,MAAnBA,QAAQ,MAAM,EACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAACP,QAAQ,IAAI;QAEzC;IACJ;IAEA,IAAIS,EAAwF,EAAE;QAC1F,IAAI,CAAC,UAAU,CAAC,IAAI,CAACA;IACzB;IAEA,MAAM,QAAWT,OAAmB,EAAEU,OAAW,EAAE;QAC/C,MAAMP,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACH,QAAQ,IAAI,KAAK,EAAE;QAElD,MAAMW,cAAc,OAAOC;YACvB,MAAMC,UAAiC;gBACnC,MAAM,IAAMjB;YAChB;YAEA,KAAK,MAAMQ,SAASD,KAAM;gBACtB,MAAMW,SAAS,MAAMV,MAAM,OAAO,CAACQ,GAAGC;gBACtC,IAAIC,WAAWlB,eACX;YAER;QACJ;QAEA,MAAMmB,WAAW,IAAI,CAAC,UAAU,CAAC,WAAW,CACxC,CAACC,MAAMP,KAAO,OAAOG,IAAUH,GAAGT,QAAQ,IAAI,EAAEY,GAAGI,OACnDL;QAIJ,MAAMI,SAASL;IACnB;;aArEQ,QAAQ,GAAG,IAAIO;aAKf,UAAU,GAIM,EAAE;;AA6D9B"}
1
+ {"version":3,"file":"editorSdk/CommandBus.js","sources":["../../src/editorSdk/CommandBus.ts"],"sourcesContent":["import type { Command } from \"./createCommand.js\";\nexport * from \"./createCommand.js\";\n\nconst INTERNAL_STOP = Symbol(\"INTERNAL_STOP\");\n\nexport type CommandHandler<T> = (\n payload: T,\n control: CommandHandlerControl\n) => void | typeof INTERNAL_STOP | Promise<void | typeof INTERNAL_STOP>;\n\nexport type CommandHandlerControl = {\n stop: () => typeof INTERNAL_STOP;\n};\n\nexport enum CommandPriority {\n LOW = -100,\n NORMAL = 0,\n HIGH = 100,\n CRITICAL = 1000\n}\n\nexport class CommandBus {\n private handlers = new Map<\n string,\n { priority: number; handler: (payload: any, control: CommandHandlerControl) => any }[]\n >();\n\n private middleware: ((\n type: string,\n payload: any,\n next: (payload: any) => Promise<void>\n ) => Promise<void>)[] = [];\n\n register<T>(\n command: Command<T>,\n handler: CommandHandler<T>,\n priority: CommandPriority = CommandPriority.NORMAL\n ): () => void {\n const list = this.handlers.get(command.type) ?? [];\n\n const entry = { handler, priority };\n list.push(entry);\n list.sort((a, b) => b.priority - a.priority);\n this.handlers.set(command.type, list);\n\n // Return an unregister function\n return () => {\n const current = this.handlers.get(command.type);\n if (!current) {\n return;\n }\n\n const index = current.indexOf(entry);\n\n if (index !== -1) {\n current.splice(index, 1);\n }\n\n if (current.length === 0) {\n this.handlers.delete(command.type);\n }\n };\n }\n\n use(mw: (type: string, payload: any, next: (payload: any) => Promise<void>) => Promise<void>) {\n this.middleware.push(mw);\n }\n\n async execute<T>(command: Command<T>, payload?: T) {\n const list = this.handlers.get(command.type) ?? [];\n\n const runHandlers = async (p?: T) => {\n const control: CommandHandlerControl = {\n stop: () => INTERNAL_STOP\n };\n\n for (const entry of list) {\n const result = await entry.handler(p, control);\n if (result === INTERNAL_STOP) {\n break;\n }\n }\n };\n\n const composed = this.middleware.reduceRight(\n (next, mw) => async (p?: T) => mw(command.type, p, next),\n runHandlers\n );\n\n // console.log(\"[Execute Command]\", command.type, payload);\n await composed(payload);\n }\n}\n"],"names":["INTERNAL_STOP","Symbol","CommandPriority","CommandBus","command","handler","priority","list","entry","a","b","current","index","mw","payload","runHandlers","p","control","result","composed","next","Map"],"mappings":";AAGA,MAAMA,gBAAgBC,OAAO;AAWtB,IAAKC,6BAAeA,WAAAA,GAAAA,SAAfA,eAAe;;gDAEd;8CACF;kDACI;WAJHA;;AAOL,MAAMC;IAYT,SACIC,OAAmB,EACnBC,OAA0B,EAC1BC,WApBK,CAoB6C,EACxC;QACV,MAAMC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACH,QAAQ,IAAI,KAAK,EAAE;QAElD,MAAMI,QAAQ;YAAEH;YAASC;QAAS;QAClCC,KAAK,IAAI,CAACC;QACVD,KAAK,IAAI,CAAC,CAACE,GAAGC,IAAMA,EAAE,QAAQ,GAAGD,EAAE,QAAQ;QAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACL,QAAQ,IAAI,EAAEG;QAGhC,OAAO;YACH,MAAMI,UAAU,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACP,QAAQ,IAAI;YAC9C,IAAI,CAACO,SACD;YAGJ,MAAMC,QAAQD,QAAQ,OAAO,CAACH;YAE9B,IAAII,AAAU,OAAVA,OACAD,QAAQ,MAAM,CAACC,OAAO;YAG1B,IAAID,AAAmB,MAAnBA,QAAQ,MAAM,EACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAACP,QAAQ,IAAI;QAEzC;IACJ;IAEA,IAAIS,EAAwF,EAAE;QAC1F,IAAI,CAAC,UAAU,CAAC,IAAI,CAACA;IACzB;IAEA,MAAM,QAAWT,OAAmB,EAAEU,OAAW,EAAE;QAC/C,MAAMP,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACH,QAAQ,IAAI,KAAK,EAAE;QAElD,MAAMW,cAAc,OAAOC;YACvB,MAAMC,UAAiC;gBACnC,MAAM,IAAMjB;YAChB;YAEA,KAAK,MAAMQ,SAASD,KAAM;gBACtB,MAAMW,SAAS,MAAMV,MAAM,OAAO,CAACQ,GAAGC;gBACtC,IAAIC,WAAWlB,eACX;YAER;QACJ;QAEA,MAAMmB,WAAW,IAAI,CAAC,UAAU,CAAC,WAAW,CACxC,CAACC,MAAMP,KAAO,OAAOG,IAAUH,GAAGT,QAAQ,IAAI,EAAEY,GAAGI,OACnDL;QAIJ,MAAMI,SAASL;IACnB;;aArEQ,QAAQ,GAAG,IAAIO;aAKf,UAAU,GAIM,EAAE;;AA6D9B"}
@@ -2,10 +2,11 @@ import { beforeEach, describe, expect, it, vi } from "vitest";
2
2
  import { Container } from "@webiny/di";
3
3
  import { WbPageStatus } from "../../../constants.js";
4
4
  import { Page, pageListCache } from "../../../domain/Page/index.js";
5
+ import { PageRevision, pageRevisionsCacheFactory } from "../../../domain/PageRevision/index.js";
5
6
  import { CreatePageRevisionFromGateway, CreatePageRevisionFromUseCase } from "./abstractions.js";
6
7
  import { CreatePageRevisionFromUseCase as external_CreatePageRevisionFromUseCase_js_CreatePageRevisionFromUseCase } from "./CreatePageRevisionFromUseCase.js";
7
8
  import { CreatePageRevisionFromRepository } from "./CreatePageRevisionFromRepository.js";
8
- import { PageListCache } from "../shared/abstractions.js";
9
+ import { PageListCache, PageRevisionsCache } from "../shared/abstractions.js";
9
10
  describe("CreatePageRevisionFrom", ()=>{
10
11
  const gateway = {
11
12
  execute: vi.fn().mockResolvedValue({
@@ -31,9 +32,11 @@ describe("CreatePageRevisionFrom", ()=>{
31
32
  })
32
33
  };
33
34
  const pagesCache = pageListCache;
35
+ const revisionsCache = pageRevisionsCacheFactory.getCache();
34
36
  beforeEach(()=>{
35
37
  vi.clearAllMocks();
36
38
  pagesCache.clear();
39
+ revisionsCache.clear();
37
40
  pagesCache.addItems([
38
41
  Page.create({
39
42
  id: "page-1#0001",
@@ -60,6 +63,7 @@ describe("CreatePageRevisionFrom", ()=>{
60
63
  it("should be able to create a page revision from another revision", async ()=>{
61
64
  const container = new Container();
62
65
  container.registerInstance(PageListCache, pagesCache);
66
+ container.registerInstance(PageRevisionsCache, revisionsCache);
63
67
  container.registerInstance(CreatePageRevisionFromGateway, gateway);
64
68
  container.register(CreatePageRevisionFromRepository).inSingletonScope();
65
69
  container.register(external_CreatePageRevisionFromUseCase_js_CreatePageRevisionFromUseCase);
@@ -79,6 +83,7 @@ describe("CreatePageRevisionFrom", ()=>{
79
83
  it("should not publish a page if id is missing", async ()=>{
80
84
  const container = new Container();
81
85
  container.registerInstance(PageListCache, pagesCache);
86
+ container.registerInstance(PageRevisionsCache, revisionsCache);
82
87
  container.registerInstance(CreatePageRevisionFromGateway, gateway);
83
88
  container.register(CreatePageRevisionFromRepository).inSingletonScope();
84
89
  container.register(external_CreatePageRevisionFromUseCase_js_CreatePageRevisionFromUseCase);
@@ -92,6 +97,41 @@ describe("CreatePageRevisionFrom", ()=>{
92
97
  expect(newRevision?.id).toEqual("page-1#0001");
93
98
  expect(newRevision?.version).toEqual(1);
94
99
  });
100
+ it("should add the new revision to the revisions cache", async ()=>{
101
+ const container = new Container();
102
+ container.registerInstance(PageListCache, pagesCache);
103
+ container.registerInstance(PageRevisionsCache, revisionsCache);
104
+ container.registerInstance(CreatePageRevisionFromGateway, gateway);
105
+ container.register(CreatePageRevisionFromRepository).inSingletonScope();
106
+ container.register(external_CreatePageRevisionFromUseCase_js_CreatePageRevisionFromUseCase);
107
+ const createPageRevisionFrom = container.resolve(CreatePageRevisionFromUseCase);
108
+ revisionsCache.addItems([
109
+ PageRevision.create({
110
+ id: "page-1#0001",
111
+ entryId: "page-1",
112
+ status: WbPageStatus.Draft,
113
+ version: 1,
114
+ savedOn: "2026-09-21T00:00:00.000Z",
115
+ title: "Page 1",
116
+ locked: false,
117
+ createdBy: {
118
+ id: "admin",
119
+ displayName: "Admin",
120
+ type: "admin"
121
+ },
122
+ createdOn: "2026-09-21T00:00:00.000Z",
123
+ revisionDescription: void 0
124
+ })
125
+ ]);
126
+ await createPageRevisionFrom.execute({
127
+ id: "page-1#0001"
128
+ });
129
+ expect(revisionsCache.count()).toEqual(2);
130
+ const newRevision = revisionsCache.getItem((revision)=>"page-1#0002" === revision.id);
131
+ expect(newRevision?.version).toEqual(2);
132
+ expect(newRevision?.entryId).toEqual("page-1");
133
+ expect(newRevision?.title).toEqual("Page 1");
134
+ });
95
135
  });
96
136
 
97
137
  //# sourceMappingURL=CreatePageRevisionFrom.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.js","sources":["../../../../src/features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { WbPageStatus } from \"~/constants.js\";\nimport { Page, pageListCache } from \"~/domain/Page/index.js\";\nimport {\n CreatePageRevisionFromUseCase as UseCaseAbstraction,\n CreatePageRevisionFromGateway as GatewayAbstraction\n} from \"./abstractions.js\";\nimport { CreatePageRevisionFromUseCase } from \"./CreatePageRevisionFromUseCase.js\";\nimport { CreatePageRevisionFromRepository } from \"./CreatePageRevisionFromRepository.js\";\nimport { PageListCache } from \"~/features/pages/shared/abstractions.js\";\n\ndescribe(\"CreatePageRevisionFrom\", () => {\n const gateway = {\n execute: vi.fn().mockResolvedValue({\n id: \"page-1#0002\",\n entryId: \"page-1\",\n status: WbPageStatus.Draft,\n version: 2,\n location: {\n folderId: \"folder-1\"\n },\n properties: {\n title: \"Page 1\"\n },\n metadata: {\n data: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n }\n })\n };\n\n const pagesCache = pageListCache;\n\n beforeEach(() => {\n vi.clearAllMocks();\n pagesCache.clear();\n pagesCache.addItems([\n Page.create({\n id: \"page-1#0001\",\n entryId: \"page-1\",\n status: WbPageStatus.Draft,\n location: {\n folderId: \"folder-1\"\n },\n properties: {\n title: \"Page 1\"\n },\n metadata: {\n data: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n }\n })\n ]);\n });\n\n it(\"should be able to create a page revision from another revision\", async () => {\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(CreatePageRevisionFromRepository).inSingletonScope();\n container.register(CreatePageRevisionFromUseCase);\n\n const createPageRevisionFrom = container.resolve(UseCaseAbstraction);\n\n expect(pagesCache.hasItems()).toBeTrue();\n const item = pagesCache.getItem(page => page.id === \"page-1#0001\");\n expect(item?.id).toEqual(\"page-1#0001\");\n\n await createPageRevisionFrom.execute({\n id: \"page-1#0001\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n\n expect(pagesCache.hasItems()).toBeTrue();\n const newRevision = pagesCache.getItem(page => page.entryId === \"page-1\");\n expect(newRevision?.id).toEqual(\"page-1#0002\");\n expect(newRevision?.version).toEqual(2);\n });\n\n it(\"should not publish a page if id is missing\", async () => {\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(CreatePageRevisionFromRepository).inSingletonScope();\n container.register(CreatePageRevisionFromUseCase);\n\n const createRevisionFrom = container.resolve(UseCaseAbstraction);\n\n await createRevisionFrom.execute({\n id: \"\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n\n const newRevision = pagesCache.getItem(page => page.entryId === \"page-1\");\n\n expect(newRevision?.id).toEqual(\"page-1#0001\");\n expect(newRevision?.id).toEqual(\"page-1#0001\");\n expect(newRevision?.version).toEqual(1);\n });\n});\n"],"names":["describe","gateway","vi","WbPageStatus","pagesCache","pageListCache","beforeEach","Page","it","container","Container","PageListCache","GatewayAbstraction","CreatePageRevisionFromRepository","CreatePageRevisionFromUseCase","createPageRevisionFrom","UseCaseAbstraction","expect","item","page","newRevision","createRevisionFrom"],"mappings":";;;;;;;;AAYAA,SAAS,0BAA0B;IAC/B,MAAMC,UAAU;QACZ,SAASC,GAAG,EAAE,GAAG,iBAAiB,CAAC;YAC/B,IAAI;YACJ,SAAS;YACT,QAAQC,aAAa,KAAK;YAC1B,SAAS;YACT,UAAU;gBACN,UAAU;YACd;YACA,YAAY;gBACR,OAAO;YACX;YACA,UAAU;gBACN,MAAM;YACV;YACA,UAAU;gBACN,UAAU;YACd;YACA,UAAU;gBACN,MAAM;YACV;QACJ;IACJ;IAEA,MAAMC,aAAaC;IAEnBC,WAAW;QACPJ,GAAG,aAAa;QAChBE,WAAW,KAAK;QAChBA,WAAW,QAAQ,CAAC;YAChBG,KAAK,MAAM,CAAC;gBACR,IAAI;gBACJ,SAAS;gBACT,QAAQJ,aAAa,KAAK;gBAC1B,UAAU;oBACN,UAAU;gBACd;gBACA,YAAY;oBACR,OAAO;gBACX;gBACA,UAAU;oBACN,MAAM;gBACV;gBACA,UAAU;oBACN,UAAU;gBACd;gBACA,UAAU;oBACN,MAAM;gBACV;YACJ;SACH;IACL;IAEAK,GAAG,kEAAkE;QACjE,MAAMC,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,eAAeP;QAC1CK,UAAU,gBAAgB,CAACG,+BAAoBX;QAC/CQ,UAAU,QAAQ,CAACI,kCAAkC,gBAAgB;QACrEJ,UAAU,QAAQ,CAACK;QAEnB,MAAMC,yBAAyBN,UAAU,OAAO,CAACO;QAEjDC,OAAOb,WAAW,QAAQ,IAAI,QAAQ;QACtC,MAAMc,OAAOd,WAAW,OAAO,CAACe,CAAAA,OAAQA,AAAY,kBAAZA,KAAK,EAAE;QAC/CF,OAAOC,MAAM,IAAI,OAAO,CAAC;QAEzB,MAAMH,uBAAuB,OAAO,CAAC;YACjC,IAAI;QACR;QAEAE,OAAOhB,QAAQ,OAAO,EAAE,qBAAqB,CAAC;QAE9CgB,OAAOb,WAAW,QAAQ,IAAI,QAAQ;QACtC,MAAMgB,cAAchB,WAAW,OAAO,CAACe,CAAAA,OAAQA,AAAiB,aAAjBA,KAAK,OAAO;QAC3DF,OAAOG,aAAa,IAAI,OAAO,CAAC;QAChCH,OAAOG,aAAa,SAAS,OAAO,CAAC;IACzC;IAEAZ,GAAG,8CAA8C;QAC7C,MAAMC,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,eAAeP;QAC1CK,UAAU,gBAAgB,CAACG,+BAAoBX;QAC/CQ,UAAU,QAAQ,CAACI,kCAAkC,gBAAgB;QACrEJ,UAAU,QAAQ,CAACK;QAEnB,MAAMO,qBAAqBZ,UAAU,OAAO,CAACO;QAE7C,MAAMK,mBAAmB,OAAO,CAAC;YAC7B,IAAI;QACR;QAEAJ,OAAOhB,QAAQ,OAAO,EAAE,qBAAqB,CAAC;QAE9C,MAAMmB,cAAchB,WAAW,OAAO,CAACe,CAAAA,OAAQA,AAAiB,aAAjBA,KAAK,OAAO;QAE3DF,OAAOG,aAAa,IAAI,OAAO,CAAC;QAChCH,OAAOG,aAAa,IAAI,OAAO,CAAC;QAChCH,OAAOG,aAAa,SAAS,OAAO,CAAC;IACzC;AACJ"}
1
+ {"version":3,"file":"features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.js","sources":["../../../../src/features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { WbPageStatus } from \"~/constants.js\";\nimport { Page, pageListCache } from \"~/domain/Page/index.js\";\nimport { PageRevision, pageRevisionsCacheFactory } from \"~/domain/PageRevision/index.js\";\nimport {\n CreatePageRevisionFromUseCase as UseCaseAbstraction,\n CreatePageRevisionFromGateway as GatewayAbstraction\n} from \"./abstractions.js\";\nimport { CreatePageRevisionFromUseCase } from \"./CreatePageRevisionFromUseCase.js\";\nimport { CreatePageRevisionFromRepository } from \"./CreatePageRevisionFromRepository.js\";\nimport { PageListCache, PageRevisionsCache } from \"~/features/pages/shared/abstractions.js\";\n\ndescribe(\"CreatePageRevisionFrom\", () => {\n const gateway = {\n execute: vi.fn().mockResolvedValue({\n id: \"page-1#0002\",\n entryId: \"page-1\",\n status: WbPageStatus.Draft,\n version: 2,\n location: {\n folderId: \"folder-1\"\n },\n properties: {\n title: \"Page 1\"\n },\n metadata: {\n data: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n }\n })\n };\n\n const pagesCache = pageListCache;\n const revisionsCache = pageRevisionsCacheFactory.getCache();\n\n beforeEach(() => {\n vi.clearAllMocks();\n pagesCache.clear();\n revisionsCache.clear();\n pagesCache.addItems([\n Page.create({\n id: \"page-1#0001\",\n entryId: \"page-1\",\n status: WbPageStatus.Draft,\n location: {\n folderId: \"folder-1\"\n },\n properties: {\n title: \"Page 1\"\n },\n metadata: {\n data: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n }\n })\n ]);\n });\n\n it(\"should be able to create a page revision from another revision\", async () => {\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(PageRevisionsCache, revisionsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(CreatePageRevisionFromRepository).inSingletonScope();\n container.register(CreatePageRevisionFromUseCase);\n\n const createPageRevisionFrom = container.resolve(UseCaseAbstraction);\n\n expect(pagesCache.hasItems()).toBeTrue();\n const item = pagesCache.getItem(page => page.id === \"page-1#0001\");\n expect(item?.id).toEqual(\"page-1#0001\");\n\n await createPageRevisionFrom.execute({\n id: \"page-1#0001\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n\n expect(pagesCache.hasItems()).toBeTrue();\n const newRevision = pagesCache.getItem(page => page.entryId === \"page-1\");\n expect(newRevision?.id).toEqual(\"page-1#0002\");\n expect(newRevision?.version).toEqual(2);\n });\n\n it(\"should not publish a page if id is missing\", async () => {\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(PageRevisionsCache, revisionsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(CreatePageRevisionFromRepository).inSingletonScope();\n container.register(CreatePageRevisionFromUseCase);\n\n const createRevisionFrom = container.resolve(UseCaseAbstraction);\n\n await createRevisionFrom.execute({\n id: \"\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n\n const newRevision = pagesCache.getItem(page => page.entryId === \"page-1\");\n\n expect(newRevision?.id).toEqual(\"page-1#0001\");\n expect(newRevision?.id).toEqual(\"page-1#0001\");\n expect(newRevision?.version).toEqual(1);\n });\n\n it(\"should add the new revision to the revisions cache\", async () => {\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(PageRevisionsCache, revisionsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(CreatePageRevisionFromRepository).inSingletonScope();\n container.register(CreatePageRevisionFromUseCase);\n\n const createPageRevisionFrom = container.resolve(UseCaseAbstraction);\n\n revisionsCache.addItems([\n PageRevision.create({\n id: \"page-1#0001\",\n entryId: \"page-1\",\n status: WbPageStatus.Draft,\n version: 1,\n savedOn: \"2026-09-21T00:00:00.000Z\",\n title: \"Page 1\",\n locked: false,\n createdBy: { id: \"admin\", displayName: \"Admin\", type: \"admin\" },\n createdOn: \"2026-09-21T00:00:00.000Z\",\n revisionDescription: undefined\n })\n ]);\n\n await createPageRevisionFrom.execute({\n id: \"page-1#0001\"\n });\n\n // The source revision must be kept: the revisions list shows every revision.\n expect(revisionsCache.count()).toEqual(2);\n\n const newRevision = revisionsCache.getItem(revision => revision.id === \"page-1#0002\");\n expect(newRevision?.version).toEqual(2);\n expect(newRevision?.entryId).toEqual(\"page-1\");\n expect(newRevision?.title).toEqual(\"Page 1\");\n });\n});\n"],"names":["describe","gateway","vi","WbPageStatus","pagesCache","pageListCache","revisionsCache","pageRevisionsCacheFactory","beforeEach","Page","it","container","Container","PageListCache","PageRevisionsCache","GatewayAbstraction","CreatePageRevisionFromRepository","CreatePageRevisionFromUseCase","createPageRevisionFrom","UseCaseAbstraction","expect","item","page","newRevision","createRevisionFrom","PageRevision","undefined","revision"],"mappings":";;;;;;;;;AAaAA,SAAS,0BAA0B;IAC/B,MAAMC,UAAU;QACZ,SAASC,GAAG,EAAE,GAAG,iBAAiB,CAAC;YAC/B,IAAI;YACJ,SAAS;YACT,QAAQC,aAAa,KAAK;YAC1B,SAAS;YACT,UAAU;gBACN,UAAU;YACd;YACA,YAAY;gBACR,OAAO;YACX;YACA,UAAU;gBACN,MAAM;YACV;YACA,UAAU;gBACN,UAAU;YACd;YACA,UAAU;gBACN,MAAM;YACV;QACJ;IACJ;IAEA,MAAMC,aAAaC;IACnB,MAAMC,iBAAiBC,0BAA0B,QAAQ;IAEzDC,WAAW;QACPN,GAAG,aAAa;QAChBE,WAAW,KAAK;QAChBE,eAAe,KAAK;QACpBF,WAAW,QAAQ,CAAC;YAChBK,KAAK,MAAM,CAAC;gBACR,IAAI;gBACJ,SAAS;gBACT,QAAQN,aAAa,KAAK;gBAC1B,UAAU;oBACN,UAAU;gBACd;gBACA,YAAY;oBACR,OAAO;gBACX;gBACA,UAAU;oBACN,MAAM;gBACV;gBACA,UAAU;oBACN,UAAU;gBACd;gBACA,UAAU;oBACN,MAAM;gBACV;YACJ;SACH;IACL;IAEAO,GAAG,kEAAkE;QACjE,MAAMC,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,eAAeT;QAC1CO,UAAU,gBAAgB,CAACG,oBAAoBR;QAC/CK,UAAU,gBAAgB,CAACI,+BAAoBd;QAC/CU,UAAU,QAAQ,CAACK,kCAAkC,gBAAgB;QACrEL,UAAU,QAAQ,CAACM;QAEnB,MAAMC,yBAAyBP,UAAU,OAAO,CAACQ;QAEjDC,OAAOhB,WAAW,QAAQ,IAAI,QAAQ;QACtC,MAAMiB,OAAOjB,WAAW,OAAO,CAACkB,CAAAA,OAAQA,AAAY,kBAAZA,KAAK,EAAE;QAC/CF,OAAOC,MAAM,IAAI,OAAO,CAAC;QAEzB,MAAMH,uBAAuB,OAAO,CAAC;YACjC,IAAI;QACR;QAEAE,OAAOnB,QAAQ,OAAO,EAAE,qBAAqB,CAAC;QAE9CmB,OAAOhB,WAAW,QAAQ,IAAI,QAAQ;QACtC,MAAMmB,cAAcnB,WAAW,OAAO,CAACkB,CAAAA,OAAQA,AAAiB,aAAjBA,KAAK,OAAO;QAC3DF,OAAOG,aAAa,IAAI,OAAO,CAAC;QAChCH,OAAOG,aAAa,SAAS,OAAO,CAAC;IACzC;IAEAb,GAAG,8CAA8C;QAC7C,MAAMC,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,eAAeT;QAC1CO,UAAU,gBAAgB,CAACG,oBAAoBR;QAC/CK,UAAU,gBAAgB,CAACI,+BAAoBd;QAC/CU,UAAU,QAAQ,CAACK,kCAAkC,gBAAgB;QACrEL,UAAU,QAAQ,CAACM;QAEnB,MAAMO,qBAAqBb,UAAU,OAAO,CAACQ;QAE7C,MAAMK,mBAAmB,OAAO,CAAC;YAC7B,IAAI;QACR;QAEAJ,OAAOnB,QAAQ,OAAO,EAAE,qBAAqB,CAAC;QAE9C,MAAMsB,cAAcnB,WAAW,OAAO,CAACkB,CAAAA,OAAQA,AAAiB,aAAjBA,KAAK,OAAO;QAE3DF,OAAOG,aAAa,IAAI,OAAO,CAAC;QAChCH,OAAOG,aAAa,IAAI,OAAO,CAAC;QAChCH,OAAOG,aAAa,SAAS,OAAO,CAAC;IACzC;IAEAb,GAAG,sDAAsD;QACrD,MAAMC,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,eAAeT;QAC1CO,UAAU,gBAAgB,CAACG,oBAAoBR;QAC/CK,UAAU,gBAAgB,CAACI,+BAAoBd;QAC/CU,UAAU,QAAQ,CAACK,kCAAkC,gBAAgB;QACrEL,UAAU,QAAQ,CAACM;QAEnB,MAAMC,yBAAyBP,UAAU,OAAO,CAACQ;QAEjDb,eAAe,QAAQ,CAAC;YACpBmB,aAAa,MAAM,CAAC;gBAChB,IAAI;gBACJ,SAAS;gBACT,QAAQtB,aAAa,KAAK;gBAC1B,SAAS;gBACT,SAAS;gBACT,OAAO;gBACP,QAAQ;gBACR,WAAW;oBAAE,IAAI;oBAAS,aAAa;oBAAS,MAAM;gBAAQ;gBAC9D,WAAW;gBACX,qBAAqBuB;YACzB;SACH;QAED,MAAMR,uBAAuB,OAAO,CAAC;YACjC,IAAI;QACR;QAGAE,OAAOd,eAAe,KAAK,IAAI,OAAO,CAAC;QAEvC,MAAMiB,cAAcjB,eAAe,OAAO,CAACqB,CAAAA,WAAYA,AAAgB,kBAAhBA,SAAS,EAAE;QAClEP,OAAOG,aAAa,SAAS,OAAO,CAAC;QACrCH,OAAOG,aAAa,SAAS,OAAO,CAAC;QACrCH,OAAOG,aAAa,OAAO,OAAO,CAAC;IACvC;AACJ"}
@@ -1,10 +1,11 @@
1
1
  import { CreatePageRevisionFromRepository as RepositoryAbstraction, CreatePageRevisionFromGateway } from "./abstractions.js";
2
2
  import { Page } from "../../../domain/Page/Page.js";
3
- import { PageListCache } from "../../../features/pages/shared/abstractions.js";
3
+ import { PageListCache, PageRevisionsCache } from "../../../features/pages/shared/abstractions.js";
4
4
  declare class CreatePageRevisionFromRepositoryImpl implements RepositoryAbstraction.Interface {
5
5
  private cache;
6
+ private revisionsCache;
6
7
  private gateway;
7
- constructor(cache: PageListCache.Interface, gateway: CreatePageRevisionFromGateway.Interface);
8
+ constructor(cache: PageListCache.Interface, revisionsCache: PageRevisionsCache.Interface, gateway: CreatePageRevisionFromGateway.Interface);
8
9
  execute(page: Page): Promise<Page>;
9
10
  }
10
11
  export declare const CreatePageRevisionFromRepository: typeof CreatePageRevisionFromRepositoryImpl & {
@@ -1,9 +1,11 @@
1
1
  import { CreatePageRevisionFromGateway, CreatePageRevisionFromRepository } from "./abstractions.js";
2
2
  import { Page } from "../../../domain/Page/Page.js";
3
- import { PageListCache } from "../shared/abstractions.js";
3
+ import { PageRevision } from "../../../domain/PageRevision/PageRevision.js";
4
+ import { PageListCache, PageRevisionsCache } from "../shared/abstractions.js";
4
5
  class CreatePageRevisionFromRepositoryImpl {
5
- constructor(cache, gateway){
6
+ constructor(cache, revisionsCache, gateway){
6
7
  this.cache = cache;
8
+ this.revisionsCache = revisionsCache;
7
9
  this.gateway = gateway;
8
10
  }
9
11
  async execute(page) {
@@ -13,6 +15,9 @@ class CreatePageRevisionFromRepositoryImpl {
13
15
  if (p.id === page.id) return newPage;
14
16
  return p;
15
17
  });
18
+ this.revisionsCache.addItems([
19
+ PageRevision.createFromPage(newPage)
20
+ ]);
16
21
  return newPage;
17
22
  }
18
23
  }
@@ -20,6 +25,7 @@ const CreatePageRevisionFromRepository_CreatePageRevisionFromRepository = Create
20
25
  implementation: CreatePageRevisionFromRepositoryImpl,
21
26
  dependencies: [
22
27
  PageListCache,
28
+ PageRevisionsCache,
23
29
  CreatePageRevisionFromGateway
24
30
  ]
25
31
  });
@@ -1 +1 @@
1
- {"version":3,"file":"features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.js","sources":["../../../../src/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.ts"],"sourcesContent":["import {\n CreatePageRevisionFromRepository as RepositoryAbstraction,\n CreatePageRevisionFromGateway\n} from \"./abstractions.js\";\nimport { Page } from \"~/domain/Page/Page.js\";\nimport { PageListCache } from \"~/features/pages/shared/abstractions.js\";\n\nclass CreatePageRevisionFromRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private cache: PageListCache.Interface,\n private gateway: CreatePageRevisionFromGateway.Interface\n ) {}\n\n async execute(page: Page) {\n const result = await this.gateway.execute(page.id);\n const newPage = Page.create(result);\n\n this.cache.updateItems(p => {\n if (p.id === page.id) {\n return newPage;\n }\n return p;\n });\n\n return newPage;\n }\n}\n\nexport const CreatePageRevisionFromRepository = RepositoryAbstraction.createImplementation({\n implementation: CreatePageRevisionFromRepositoryImpl,\n dependencies: [PageListCache, CreatePageRevisionFromGateway]\n});\n"],"names":["CreatePageRevisionFromRepositoryImpl","cache","gateway","page","result","newPage","Page","p","CreatePageRevisionFromRepository","RepositoryAbstraction","PageListCache","CreatePageRevisionFromGateway"],"mappings":";;;AAOA,MAAMA;IACF,YACYC,KAA8B,EAC9BC,OAAgD,CAC1D;aAFUD,KAAK,GAALA;aACAC,OAAO,GAAPA;IACT;IAEH,MAAM,QAAQC,IAAU,EAAE;QACtB,MAAMC,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACD,KAAK,EAAE;QACjD,MAAME,UAAUC,KAAK,MAAM,CAACF;QAE5B,IAAI,CAAC,KAAK,CAAC,WAAW,CAACG,CAAAA;YACnB,IAAIA,EAAE,EAAE,KAAKJ,KAAK,EAAE,EAChB,OAAOE;YAEX,OAAOE;QACX;QAEA,OAAOF;IACX;AACJ;AAEO,MAAMG,oEAAmCC,iCAAAA,oBAA0C,CAAC;IACvF,gBAAgBT;IAChB,cAAc;QAACU;QAAeC;KAA8B;AAChE"}
1
+ {"version":3,"file":"features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.js","sources":["../../../../src/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.ts"],"sourcesContent":["import {\n CreatePageRevisionFromRepository as RepositoryAbstraction,\n CreatePageRevisionFromGateway\n} from \"./abstractions.js\";\nimport { Page } from \"~/domain/Page/Page.js\";\nimport { PageRevision } from \"~/domain/PageRevision/PageRevision.js\";\nimport { PageListCache, PageRevisionsCache } from \"~/features/pages/shared/abstractions.js\";\n\nclass CreatePageRevisionFromRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private cache: PageListCache.Interface,\n private revisionsCache: PageRevisionsCache.Interface,\n private gateway: CreatePageRevisionFromGateway.Interface\n ) {}\n\n async execute(page: Page) {\n const result = await this.gateway.execute(page.id);\n const newPage = Page.create(result);\n\n // The page list only ever shows the latest revision, so the source revision is replaced.\n this.cache.updateItems(p => {\n if (p.id === page.id) {\n return newPage;\n }\n return p;\n });\n\n // The revisions list, on the other hand, shows every revision, so this is an insert.\n this.revisionsCache.addItems([PageRevision.createFromPage(newPage)]);\n\n return newPage;\n }\n}\n\nexport const CreatePageRevisionFromRepository = RepositoryAbstraction.createImplementation({\n implementation: CreatePageRevisionFromRepositoryImpl,\n dependencies: [PageListCache, PageRevisionsCache, CreatePageRevisionFromGateway]\n});\n"],"names":["CreatePageRevisionFromRepositoryImpl","cache","revisionsCache","gateway","page","result","newPage","Page","p","PageRevision","CreatePageRevisionFromRepository","RepositoryAbstraction","PageListCache","PageRevisionsCache","CreatePageRevisionFromGateway"],"mappings":";;;;AAQA,MAAMA;IACF,YACYC,KAA8B,EAC9BC,cAA4C,EAC5CC,OAAgD,CAC1D;aAHUF,KAAK,GAALA;aACAC,cAAc,GAAdA;aACAC,OAAO,GAAPA;IACT;IAEH,MAAM,QAAQC,IAAU,EAAE;QACtB,MAAMC,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACD,KAAK,EAAE;QACjD,MAAME,UAAUC,KAAK,MAAM,CAACF;QAG5B,IAAI,CAAC,KAAK,CAAC,WAAW,CAACG,CAAAA;YACnB,IAAIA,EAAE,EAAE,KAAKJ,KAAK,EAAE,EAChB,OAAOE;YAEX,OAAOE;QACX;QAGA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;YAACC,aAAa,cAAc,CAACH;SAAS;QAEnE,OAAOA;IACX;AACJ;AAEO,MAAMI,oEAAmCC,iCAAAA,oBAA0C,CAAC;IACvF,gBAAgBX;IAChB,cAAc;QAACY;QAAeC;QAAoBC;KAA8B;AACpF"}
@@ -0,0 +1,67 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { Container } from "@webiny/di";
3
+ import { WbPageStatus } from "../../../constants.js";
4
+ import { PageRevision, pageRevisionsCacheFactory } from "../../../domain/PageRevision/index.js";
5
+ import { DeletePageRevisionGateway, DeletePageRevisionUseCase } from "./abstractions.js";
6
+ import { DeletePageRevisionUseCase as external_DeletePageRevisionUseCase_js_DeletePageRevisionUseCase } from "./DeletePageRevisionUseCase.js";
7
+ import { DeletePageRevisionRepository } from "./DeletePageRevisionRepository.js";
8
+ import { PageRevisionsCache } from "../shared/abstractions.js";
9
+ const createRevision = (id, version)=>PageRevision.create({
10
+ id,
11
+ entryId: "page-1",
12
+ version,
13
+ status: WbPageStatus.Draft,
14
+ savedOn: "2026-09-21T00:00:00.000Z",
15
+ title: "Page 1",
16
+ locked: false,
17
+ createdBy: {
18
+ id: "admin",
19
+ displayName: "Admin",
20
+ type: "admin"
21
+ },
22
+ createdOn: "2026-09-21T00:00:00.000Z",
23
+ revisionDescription: void 0
24
+ });
25
+ describe("DeletePageRevision", ()=>{
26
+ const gateway = {
27
+ execute: vi.fn().mockResolvedValue(void 0)
28
+ };
29
+ const revisionsCache = pageRevisionsCacheFactory.getCache();
30
+ const createUseCase = ()=>{
31
+ const container = new Container();
32
+ container.registerInstance(PageRevisionsCache, revisionsCache);
33
+ container.registerInstance(DeletePageRevisionGateway, gateway);
34
+ container.register(DeletePageRevisionRepository).inSingletonScope();
35
+ container.register(external_DeletePageRevisionUseCase_js_DeletePageRevisionUseCase);
36
+ return container.resolve(DeletePageRevisionUseCase);
37
+ };
38
+ beforeEach(()=>{
39
+ vi.clearAllMocks();
40
+ revisionsCache.clear();
41
+ revisionsCache.addItems([
42
+ createRevision("page-1#0001", 1),
43
+ createRevision("page-1#0002", 2)
44
+ ]);
45
+ });
46
+ it("should remove the deleted revision from the revisions cache", async ()=>{
47
+ const deletePageRevision = createUseCase();
48
+ await deletePageRevision.execute({
49
+ id: "page-1#0001"
50
+ });
51
+ expect(gateway.execute).toHaveBeenCalledTimes(1);
52
+ expect(gateway.execute).toHaveBeenCalledWith("page-1#0001");
53
+ expect(revisionsCache.count()).toEqual(1);
54
+ expect(revisionsCache.getItem((r)=>"page-1#0001" === r.id)).toBeUndefined();
55
+ expect(revisionsCache.getItem((r)=>"page-1#0002" === r.id)).toBeDefined();
56
+ });
57
+ it("should keep the cache untouched if the deletion fails", async ()=>{
58
+ gateway.execute.mockRejectedValueOnce(new Error("Could not delete page revision."));
59
+ const deletePageRevision = createUseCase();
60
+ await expect(deletePageRevision.execute({
61
+ id: "page-1#0001"
62
+ })).rejects.toThrow("Could not delete page revision.");
63
+ expect(revisionsCache.count()).toEqual(2);
64
+ });
65
+ });
66
+
67
+ //# sourceMappingURL=DeletePageRevision.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/pages/deletePageRevision/DeletePageRevision.test.js","sources":["../../../../src/features/pages/deletePageRevision/DeletePageRevision.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { WbPageStatus } from \"~/constants.js\";\nimport { PageRevision, pageRevisionsCacheFactory } from \"~/domain/PageRevision/index.js\";\nimport {\n DeletePageRevisionUseCase as UseCaseAbstraction,\n DeletePageRevisionGateway as GatewayAbstraction\n} from \"./abstractions.js\";\nimport { DeletePageRevisionUseCase } from \"./DeletePageRevisionUseCase.js\";\nimport { DeletePageRevisionRepository } from \"./DeletePageRevisionRepository.js\";\nimport { PageRevisionsCache } from \"~/features/pages/shared/abstractions.js\";\n\nconst createRevision = (id: string, version: number) => {\n return PageRevision.create({\n id,\n entryId: \"page-1\",\n version,\n status: WbPageStatus.Draft,\n savedOn: \"2026-09-21T00:00:00.000Z\",\n title: \"Page 1\",\n locked: false,\n createdBy: { id: \"admin\", displayName: \"Admin\", type: \"admin\" },\n createdOn: \"2026-09-21T00:00:00.000Z\",\n revisionDescription: undefined\n });\n};\n\ndescribe(\"DeletePageRevision\", () => {\n const gateway = {\n execute: vi.fn().mockResolvedValue(undefined)\n };\n\n const revisionsCache = pageRevisionsCacheFactory.getCache();\n\n const createUseCase = () => {\n const container = new Container();\n container.registerInstance(PageRevisionsCache, revisionsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(DeletePageRevisionRepository).inSingletonScope();\n container.register(DeletePageRevisionUseCase);\n\n return container.resolve(UseCaseAbstraction);\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n revisionsCache.clear();\n revisionsCache.addItems([\n createRevision(\"page-1#0001\", 1),\n createRevision(\"page-1#0002\", 2)\n ]);\n });\n\n it(\"should remove the deleted revision from the revisions cache\", async () => {\n const deletePageRevision = createUseCase();\n\n await deletePageRevision.execute({ id: \"page-1#0001\" });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n expect(gateway.execute).toHaveBeenCalledWith(\"page-1#0001\");\n\n expect(revisionsCache.count()).toEqual(1);\n expect(revisionsCache.getItem(r => r.id === \"page-1#0001\")).toBeUndefined();\n expect(revisionsCache.getItem(r => r.id === \"page-1#0002\")).toBeDefined();\n });\n\n it(\"should keep the cache untouched if the deletion fails\", async () => {\n gateway.execute.mockRejectedValueOnce(new Error(\"Could not delete page revision.\"));\n const deletePageRevision = createUseCase();\n\n await expect(deletePageRevision.execute({ id: \"page-1#0001\" })).rejects.toThrow(\n \"Could not delete page revision.\"\n );\n\n expect(revisionsCache.count()).toEqual(2);\n });\n});\n"],"names":["createRevision","id","version","PageRevision","WbPageStatus","undefined","describe","gateway","vi","revisionsCache","pageRevisionsCacheFactory","createUseCase","container","Container","PageRevisionsCache","GatewayAbstraction","DeletePageRevisionRepository","DeletePageRevisionUseCase","UseCaseAbstraction","beforeEach","it","deletePageRevision","expect","r","Error"],"mappings":";;;;;;;;AAYA,MAAMA,iBAAiB,CAACC,IAAYC,UACzBC,aAAa,MAAM,CAAC;QACvBF;QACA,SAAS;QACTC;QACA,QAAQE,aAAa,KAAK;QAC1B,SAAS;QACT,OAAO;QACP,QAAQ;QACR,WAAW;YAAE,IAAI;YAAS,aAAa;YAAS,MAAM;QAAQ;QAC9D,WAAW;QACX,qBAAqBC;IACzB;AAGJC,SAAS,sBAAsB;IAC3B,MAAMC,UAAU;QACZ,SAASC,GAAG,EAAE,GAAG,iBAAiB,CAACH;IACvC;IAEA,MAAMI,iBAAiBC,0BAA0B,QAAQ;IAEzD,MAAMC,gBAAgB;QAClB,MAAMC,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,oBAAoBL;QAC/CG,UAAU,gBAAgB,CAACG,2BAAoBR;QAC/CK,UAAU,QAAQ,CAACI,8BAA8B,gBAAgB;QACjEJ,UAAU,QAAQ,CAACK;QAEnB,OAAOL,UAAU,OAAO,CAACM;IAC7B;IAEAC,WAAW;QACPX,GAAG,aAAa;QAChBC,eAAe,KAAK;QACpBA,eAAe,QAAQ,CAAC;YACpBT,eAAe,eAAe;YAC9BA,eAAe,eAAe;SACjC;IACL;IAEAoB,GAAG,+DAA+D;QAC9D,MAAMC,qBAAqBV;QAE3B,MAAMU,mBAAmB,OAAO,CAAC;YAAE,IAAI;QAAc;QAErDC,OAAOf,QAAQ,OAAO,EAAE,qBAAqB,CAAC;QAC9Ce,OAAOf,QAAQ,OAAO,EAAE,oBAAoB,CAAC;QAE7Ce,OAAOb,eAAe,KAAK,IAAI,OAAO,CAAC;QACvCa,OAAOb,eAAe,OAAO,CAACc,CAAAA,IAAKA,AAAS,kBAATA,EAAE,EAAE,GAAqB,aAAa;QACzED,OAAOb,eAAe,OAAO,CAACc,CAAAA,IAAKA,AAAS,kBAATA,EAAE,EAAE,GAAqB,WAAW;IAC3E;IAEAH,GAAG,yDAAyD;QACxDb,QAAQ,OAAO,CAAC,qBAAqB,CAAC,IAAIiB,MAAM;QAChD,MAAMH,qBAAqBV;QAE3B,MAAMW,OAAOD,mBAAmB,OAAO,CAAC;YAAE,IAAI;QAAc,IAAI,OAAO,CAAC,OAAO,CAC3E;QAGJC,OAAOb,eAAe,KAAK,IAAI,OAAO,CAAC;IAC3C;AACJ"}
@@ -3,7 +3,7 @@ import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient";
3
3
  declare class DeletePageRevisionGatewayImpl implements GatewayAbstraction.Interface {
4
4
  private client;
5
5
  constructor(client: MainGraphQLClient.Interface);
6
- execute(id: string, permanently: boolean): Promise<void>;
6
+ execute(id: string): Promise<void>;
7
7
  }
8
8
  export declare const DeletePageRevisionGateway: typeof DeletePageRevisionGatewayImpl & {
9
9
  __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IDeletePageRevisionGateway>;
@@ -18,12 +18,11 @@ class DeletePageRevisionGatewayImpl {
18
18
  constructor(client){
19
19
  this.client = client;
20
20
  }
21
- async execute(id, permanently) {
21
+ async execute(id) {
22
22
  const response = await this.client.execute({
23
23
  query: DELETE_PAGE_REVISION,
24
24
  variables: {
25
- id,
26
- permanently
25
+ id
27
26
  }
28
27
  });
29
28
  const envelope = response.websiteBuilder.deletePageRevision;
@@ -1 +1 @@
1
- {"version":3,"file":"features/pages/deletePageRevision/DeletePageRevisionGateway.js","sources":["../../../../src/features/pages/deletePageRevision/DeletePageRevisionGateway.ts"],"sourcesContent":["import { DeletePageRevisionGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient\";\n\nconst DELETE_PAGE_REVISION = /* GraphQL */ `\n mutation DeletePageRevision($id: ID!) {\n websiteBuilder {\n deletePageRevision(id: $id) {\n data\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\ntype DeletePageRevisionResponse = {\n websiteBuilder: {\n deletePageRevision:\n | { data: boolean; error: null }\n | { data: null; error: { code: string; message: string; data: any } };\n };\n};\n\nclass DeletePageRevisionGatewayImpl implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async execute(id: string, permanently: boolean) {\n const response = await this.client.execute<DeletePageRevisionResponse>({\n query: DELETE_PAGE_REVISION,\n variables: {\n id,\n permanently\n }\n });\n\n const envelope = response.websiteBuilder.deletePageRevision;\n if (envelope.error) {\n throw new Error(envelope.error.message || \"Could not delete page revision.\");\n }\n }\n}\n\nexport const DeletePageRevisionGateway = GatewayAbstraction.createImplementation({\n implementation: DeletePageRevisionGatewayImpl,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["DELETE_PAGE_REVISION","DeletePageRevisionGatewayImpl","client","id","permanently","response","envelope","Error","DeletePageRevisionGateway","GatewayAbstraction","MainGraphQLClient"],"mappings":";;AAGA,MAAMA,uBAAqC,CAAC;;;;;;;;;;;;;AAa5C,CAAC;AAUD,MAAMC;IACF,YAAoBC,MAAmC,CAAE;aAArCA,MAAM,GAANA;IAAsC;IAE1D,MAAM,QAAQC,EAAU,EAAEC,WAAoB,EAAE;QAC5C,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA6B;YACnE,OAAOL;YACP,WAAW;gBACPG;gBACAC;YACJ;QACJ;QAEA,MAAME,WAAWD,SAAS,cAAc,CAAC,kBAAkB;QAC3D,IAAIC,SAAS,KAAK,EACd,MAAM,IAAIC,MAAMD,SAAS,KAAK,CAAC,OAAO,IAAI;IAElD;AACJ;AAEO,MAAME,sDAA4BC,0BAAAA,oBAAuC,CAAC;IAC7E,gBAAgBR;IAChB,cAAc;QAACS;KAAkB;AACrC"}
1
+ {"version":3,"file":"features/pages/deletePageRevision/DeletePageRevisionGateway.js","sources":["../../../../src/features/pages/deletePageRevision/DeletePageRevisionGateway.ts"],"sourcesContent":["import { DeletePageRevisionGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient\";\n\nconst DELETE_PAGE_REVISION = /* GraphQL */ `\n mutation DeletePageRevision($id: ID!) {\n websiteBuilder {\n deletePageRevision(id: $id) {\n data\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\ntype DeletePageRevisionResponse = {\n websiteBuilder: {\n deletePageRevision:\n | { data: boolean; error: null }\n | { data: null; error: { code: string; message: string; data: any } };\n };\n};\n\nclass DeletePageRevisionGatewayImpl implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async execute(id: string) {\n const response = await this.client.execute<DeletePageRevisionResponse>({\n query: DELETE_PAGE_REVISION,\n variables: {\n id\n }\n });\n\n const envelope = response.websiteBuilder.deletePageRevision;\n if (envelope.error) {\n throw new Error(envelope.error.message || \"Could not delete page revision.\");\n }\n }\n}\n\nexport const DeletePageRevisionGateway = GatewayAbstraction.createImplementation({\n implementation: DeletePageRevisionGatewayImpl,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["DELETE_PAGE_REVISION","DeletePageRevisionGatewayImpl","client","id","response","envelope","Error","DeletePageRevisionGateway","GatewayAbstraction","MainGraphQLClient"],"mappings":";;AAGA,MAAMA,uBAAqC,CAAC;;;;;;;;;;;;;AAa5C,CAAC;AAUD,MAAMC;IACF,YAAoBC,MAAmC,CAAE;aAArCA,MAAM,GAANA;IAAsC;IAE1D,MAAM,QAAQC,EAAU,EAAE;QACtB,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA6B;YACnE,OAAOJ;YACP,WAAW;gBACPG;YACJ;QACJ;QAEA,MAAME,WAAWD,SAAS,cAAc,CAAC,kBAAkB;QAC3D,IAAIC,SAAS,KAAK,EACd,MAAM,IAAIC,MAAMD,SAAS,KAAK,CAAC,OAAO,IAAI;IAElD;AACJ;AAEO,MAAME,sDAA4BC,0BAAAA,oBAAuC,CAAC;IAC7E,gBAAgBP;IAChB,cAAc;QAACQ;KAAkB;AACrC"}
@@ -1,9 +1,11 @@
1
1
  import { DeletePageRevisionGateway, DeletePageRevisionRepository as RepositoryAbstraction } from "./abstractions.js";
2
2
  import type { Page } from "../../../domain/Page/Page.js";
3
+ import { PageRevisionsCache } from "../../../features/pages/shared/abstractions.js";
3
4
  declare class DeletePageRevisionRepositoryImpl implements RepositoryAbstraction.Interface {
5
+ private readonly revisionsCache;
4
6
  private readonly gateway;
5
- constructor(gateway: DeletePageRevisionGateway.Interface);
6
- execute(page: Page, permanently?: boolean): Promise<void>;
7
+ constructor(revisionsCache: PageRevisionsCache.Interface, gateway: DeletePageRevisionGateway.Interface);
8
+ execute(page: Page): Promise<void>;
7
9
  }
8
10
  export declare const DeletePageRevisionRepository: typeof DeletePageRevisionRepositoryImpl & {
9
11
  __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IDeletePageRevisionRepository>;
@@ -1,15 +1,19 @@
1
1
  import { DeletePageRevisionGateway, DeletePageRevisionRepository } from "./abstractions.js";
2
+ import { PageRevisionsCache } from "../shared/abstractions.js";
2
3
  class DeletePageRevisionRepositoryImpl {
3
- constructor(gateway){
4
+ constructor(revisionsCache, gateway){
5
+ this.revisionsCache = revisionsCache;
4
6
  this.gateway = gateway;
5
7
  }
6
- async execute(page, permanently = false) {
7
- await this.gateway.execute(page.id, permanently);
8
+ async execute(page) {
9
+ await this.gateway.execute(page.id);
10
+ this.revisionsCache.removeItems((revision)=>revision.id === page.id);
8
11
  }
9
12
  }
10
13
  const DeletePageRevisionRepository_DeletePageRevisionRepository = DeletePageRevisionRepository.createImplementation({
11
14
  implementation: DeletePageRevisionRepositoryImpl,
12
15
  dependencies: [
16
+ PageRevisionsCache,
13
17
  DeletePageRevisionGateway
14
18
  ]
15
19
  });
@@ -1 +1 @@
1
- {"version":3,"file":"features/pages/deletePageRevision/DeletePageRevisionRepository.js","sources":["../../../../src/features/pages/deletePageRevision/DeletePageRevisionRepository.ts"],"sourcesContent":["import {\n DeletePageRevisionGateway,\n DeletePageRevisionRepository as RepositoryAbstraction\n} from \"./abstractions.js\";\nimport type { Page } from \"~/domain/Page/Page.js\";\n\nclass DeletePageRevisionRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(private readonly gateway: DeletePageRevisionGateway.Interface) {}\n\n async execute(page: Page, permanently = false) {\n await this.gateway.execute(page.id, permanently);\n }\n}\n\nexport const DeletePageRevisionRepository = RepositoryAbstraction.createImplementation({\n implementation: DeletePageRevisionRepositoryImpl,\n dependencies: [DeletePageRevisionGateway]\n});\n"],"names":["DeletePageRevisionRepositoryImpl","gateway","page","permanently","DeletePageRevisionRepository","RepositoryAbstraction","DeletePageRevisionGateway"],"mappings":";AAMA,MAAMA;IACF,YAA6BC,OAA4C,CAAE;aAA9CA,OAAO,GAAPA;IAA+C;IAE5E,MAAM,QAAQC,IAAU,EAAEC,cAAc,KAAK,EAAE;QAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACD,KAAK,EAAE,EAAEC;IACxC;AACJ;AAEO,MAAMC,4DAA+BC,6BAAAA,oBAA0C,CAAC;IACnF,gBAAgBL;IAChB,cAAc;QAACM;KAA0B;AAC7C"}
1
+ {"version":3,"file":"features/pages/deletePageRevision/DeletePageRevisionRepository.js","sources":["../../../../src/features/pages/deletePageRevision/DeletePageRevisionRepository.ts"],"sourcesContent":["import {\n DeletePageRevisionGateway,\n DeletePageRevisionRepository as RepositoryAbstraction\n} from \"./abstractions.js\";\nimport type { Page } from \"~/domain/Page/Page.js\";\nimport { PageRevisionsCache } from \"~/features/pages/shared/abstractions.js\";\n\nclass DeletePageRevisionRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private readonly revisionsCache: PageRevisionsCache.Interface,\n private readonly gateway: DeletePageRevisionGateway.Interface\n ) {}\n\n async execute(page: Page) {\n await this.gateway.execute(page.id);\n\n this.revisionsCache.removeItems(revision => revision.id === page.id);\n }\n}\n\nexport const DeletePageRevisionRepository = RepositoryAbstraction.createImplementation({\n implementation: DeletePageRevisionRepositoryImpl,\n dependencies: [PageRevisionsCache, DeletePageRevisionGateway]\n});\n"],"names":["DeletePageRevisionRepositoryImpl","revisionsCache","gateway","page","revision","DeletePageRevisionRepository","RepositoryAbstraction","PageRevisionsCache","DeletePageRevisionGateway"],"mappings":";;AAOA,MAAMA;IACF,YACqBC,cAA4C,EAC5CC,OAA4C,CAC/D;aAFmBD,cAAc,GAAdA;aACAC,OAAO,GAAPA;IAClB;IAEH,MAAM,QAAQC,IAAU,EAAE;QACtB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACA,KAAK,EAAE;QAElC,IAAI,CAAC,cAAc,CAAC,WAAW,CAACC,CAAAA,WAAYA,SAAS,EAAE,KAAKD,KAAK,EAAE;IACvE;AACJ;AAEO,MAAME,4DAA+BC,6BAAAA,oBAA0C,CAAC;IACnF,gBAAgBN;IAChB,cAAc;QAACO;QAAoBC;KAA0B;AACjE"}
@@ -7,7 +7,7 @@ class DeletePageRevisionUseCaseImpl {
7
7
  async execute(params) {
8
8
  await this.repository.execute(Page.create({
9
9
  id: params.id
10
- }), params.permanently);
10
+ }));
11
11
  }
12
12
  }
13
13
  const DeletePageRevisionUseCase_DeletePageRevisionUseCase = DeletePageRevisionUseCase.createImplementation({
@@ -1 +1 @@
1
- {"version":3,"file":"features/pages/deletePageRevision/DeletePageRevisionUseCase.js","sources":["../../../../src/features/pages/deletePageRevision/DeletePageRevisionUseCase.ts"],"sourcesContent":["import {\n DeletePageRevisionUseCase as UseCaseAbstraction,\n DeletePageRevisionRepository\n} from \"./abstractions.js\";\nimport { Page } from \"~/domain/Page/Page.js\";\n\nclass DeletePageRevisionUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: DeletePageRevisionRepository.Interface) {}\n\n async execute(params: UseCaseAbstraction.Params) {\n await this.repository.execute(Page.create({ id: params.id }), params.permanently);\n }\n}\n\nexport const DeletePageRevisionUseCase = UseCaseAbstraction.createImplementation({\n implementation: DeletePageRevisionUseCaseImpl,\n dependencies: [DeletePageRevisionRepository]\n});\n"],"names":["DeletePageRevisionUseCaseImpl","repository","params","Page","DeletePageRevisionUseCase","UseCaseAbstraction","DeletePageRevisionRepository"],"mappings":";;AAMA,MAAMA;IACF,YAAoBC,UAAkD,CAAE;aAApDA,UAAU,GAAVA;IAAqD;IAEzE,MAAM,QAAQC,MAAiC,EAAE;QAC7C,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACC,KAAK,MAAM,CAAC;YAAE,IAAID,OAAO,EAAE;QAAC,IAAIA,OAAO,WAAW;IACpF;AACJ;AAEO,MAAME,sDAA4BC,0BAAAA,oBAAuC,CAAC;IAC7E,gBAAgBL;IAChB,cAAc;QAACM;KAA6B;AAChD"}
1
+ {"version":3,"file":"features/pages/deletePageRevision/DeletePageRevisionUseCase.js","sources":["../../../../src/features/pages/deletePageRevision/DeletePageRevisionUseCase.ts"],"sourcesContent":["import {\n DeletePageRevisionUseCase as UseCaseAbstraction,\n DeletePageRevisionRepository\n} from \"./abstractions.js\";\nimport { Page } from \"~/domain/Page/Page.js\";\n\nclass DeletePageRevisionUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: DeletePageRevisionRepository.Interface) {}\n\n async execute(params: UseCaseAbstraction.Params) {\n await this.repository.execute(Page.create({ id: params.id }));\n }\n}\n\nexport const DeletePageRevisionUseCase = UseCaseAbstraction.createImplementation({\n implementation: DeletePageRevisionUseCaseImpl,\n dependencies: [DeletePageRevisionRepository]\n});\n"],"names":["DeletePageRevisionUseCaseImpl","repository","params","Page","DeletePageRevisionUseCase","UseCaseAbstraction","DeletePageRevisionRepository"],"mappings":";;AAMA,MAAMA;IACF,YAAoBC,UAAkD,CAAE;aAApDA,UAAU,GAAVA;IAAqD;IAEzE,MAAM,QAAQC,MAAiC,EAAE;QAC7C,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACC,KAAK,MAAM,CAAC;YAAE,IAAID,OAAO,EAAE;QAAC;IAC9D;AACJ;AAEO,MAAME,sDAA4BC,0BAAAA,oBAAuC,CAAC;IAC7E,gBAAgBL;IAChB,cAAc;QAACM;KAA6B;AAChD"}
@@ -1,7 +1,6 @@
1
1
  import type { Page } from "../../../domain/Page/Page.js";
2
2
  export interface DeletePageRevisionParams {
3
3
  id: string;
4
- permanently: boolean;
5
4
  }
6
5
  export interface IDeletePageRevisionUseCase {
7
6
  execute(params: DeletePageRevisionParams): Promise<void>;
@@ -12,14 +11,14 @@ export declare namespace DeletePageRevisionUseCase {
12
11
  type Params = DeletePageRevisionParams;
13
12
  }
14
13
  export interface IDeletePageRevisionRepository {
15
- execute(page: Page, permanently: boolean): Promise<void>;
14
+ execute(page: Page): Promise<void>;
16
15
  }
17
16
  export declare const DeletePageRevisionRepository: import("@webiny/di").Abstraction<IDeletePageRevisionRepository>;
18
17
  export declare namespace DeletePageRevisionRepository {
19
18
  type Interface = IDeletePageRevisionRepository;
20
19
  }
21
20
  export interface IDeletePageRevisionGateway {
22
- execute(id: string, permanently: boolean): Promise<void>;
21
+ execute(id: string): Promise<void>;
23
22
  }
24
23
  export declare const DeletePageRevisionGateway: import("@webiny/di").Abstraction<IDeletePageRevisionGateway>;
25
24
  export declare namespace DeletePageRevisionGateway {
@@ -1 +1 @@
1
- {"version":3,"file":"features/pages/deletePageRevision/abstractions.js","sources":["../../../../src/features/pages/deletePageRevision/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { Page } from \"~/domain/Page/Page.js\";\n\n//\n// Params\n//\nexport interface DeletePageRevisionParams {\n id: string;\n permanently: boolean;\n}\n\n//\n// UseCase\n//\nexport interface IDeletePageRevisionUseCase {\n execute(params: DeletePageRevisionParams): Promise<void>;\n}\n\nexport const DeletePageRevisionUseCase = createAbstraction<IDeletePageRevisionUseCase>(\n \"WebsiteBuilder/DeletePageRevisionUseCase\"\n);\n\nexport namespace DeletePageRevisionUseCase {\n export type Interface = IDeletePageRevisionUseCase;\n export type Params = DeletePageRevisionParams;\n}\n\n//\n// Repository\n//\nexport interface IDeletePageRevisionRepository {\n execute(page: Page, permanently: boolean): Promise<void>;\n}\n\nexport const DeletePageRevisionRepository = createAbstraction<IDeletePageRevisionRepository>(\n \"WebsiteBuilder/DeletePageRevisionRepository\"\n);\n\nexport namespace DeletePageRevisionRepository {\n export type Interface = IDeletePageRevisionRepository;\n}\n\n//\n// Gateway\n//\nexport interface IDeletePageRevisionGateway {\n execute(id: string, permanently: boolean): Promise<void>;\n}\n\nexport const DeletePageRevisionGateway = createAbstraction<IDeletePageRevisionGateway>(\n \"WebsiteBuilder/DeletePageRevisionGateway\"\n);\n\nexport namespace DeletePageRevisionGateway {\n export type Interface = IDeletePageRevisionGateway;\n}\n"],"names":["DeletePageRevisionUseCase","createAbstraction","DeletePageRevisionRepository","DeletePageRevisionGateway"],"mappings":";AAkBO,MAAMA,4BAA4BC,kBACrC;AAeG,MAAMC,+BAA+BD,kBACxC;AAcG,MAAME,4BAA4BF,kBACrC"}
1
+ {"version":3,"file":"features/pages/deletePageRevision/abstractions.js","sources":["../../../../src/features/pages/deletePageRevision/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { Page } from \"~/domain/Page/Page.js\";\n\n//\n// Params\n//\nexport interface DeletePageRevisionParams {\n id: string;\n}\n\n//\n// UseCase\n//\nexport interface IDeletePageRevisionUseCase {\n execute(params: DeletePageRevisionParams): Promise<void>;\n}\n\nexport const DeletePageRevisionUseCase = createAbstraction<IDeletePageRevisionUseCase>(\n \"WebsiteBuilder/DeletePageRevisionUseCase\"\n);\n\nexport namespace DeletePageRevisionUseCase {\n export type Interface = IDeletePageRevisionUseCase;\n export type Params = DeletePageRevisionParams;\n}\n\n//\n// Repository\n//\nexport interface IDeletePageRevisionRepository {\n execute(page: Page): Promise<void>;\n}\n\nexport const DeletePageRevisionRepository = createAbstraction<IDeletePageRevisionRepository>(\n \"WebsiteBuilder/DeletePageRevisionRepository\"\n);\n\nexport namespace DeletePageRevisionRepository {\n export type Interface = IDeletePageRevisionRepository;\n}\n\n//\n// Gateway\n//\nexport interface IDeletePageRevisionGateway {\n execute(id: string): Promise<void>;\n}\n\nexport const DeletePageRevisionGateway = createAbstraction<IDeletePageRevisionGateway>(\n \"WebsiteBuilder/DeletePageRevisionGateway\"\n);\n\nexport namespace DeletePageRevisionGateway {\n export type Interface = IDeletePageRevisionGateway;\n}\n"],"names":["DeletePageRevisionUseCase","createAbstraction","DeletePageRevisionRepository","DeletePageRevisionGateway"],"mappings":";AAiBO,MAAMA,4BAA4BC,kBACrC;AAeG,MAAMC,+BAA+BD,kBACxC;AAcG,MAAME,4BAA4BF,kBACrC"}
@@ -4,6 +4,8 @@ export interface PageGatewayDto {
4
4
  id: string;
5
5
  entryId: string;
6
6
  status: WbStatus;
7
+ version: number;
8
+ locked: boolean;
7
9
  location: WbLocation;
8
10
  properties: Record<string, any>;
9
11
  metadata: Record<string, any>;
@@ -2,10 +2,11 @@ import { beforeEach, describe, expect, it, vi } from "vitest";
2
2
  import { Container } from "@webiny/di";
3
3
  import { WbPageStatus } from "../../../constants.js";
4
4
  import { Page, fullPageCache, pageListCache } from "../../../domain/Page/index.js";
5
+ import { PageRevision, pageRevisionsCacheFactory } from "../../../domain/PageRevision/index.js";
5
6
  import { PublishPageGateway, PublishPageUseCase } from "./abstractions.js";
6
7
  import { PublishPageUseCase as external_PublishPageUseCase_js_PublishPageUseCase } from "./PublishPageUseCase.js";
7
8
  import { PublishPageRepository } from "./PublishPageRepository.js";
8
- import { FullPageCache, PageListCache } from "../shared/abstractions.js";
9
+ import { FullPageCache, PageListCache, PageRevisionsCache } from "../shared/abstractions.js";
9
10
  describe("PublishPage", ()=>{
10
11
  const gateway = {
11
12
  execute: vi.fn().mockResolvedValue({
@@ -90,6 +91,7 @@ describe("PublishPage", ()=>{
90
91
  const container = new Container();
91
92
  container.registerInstance(PageListCache, pagesCache);
92
93
  container.registerInstance(FullPageCache, fullPageCache);
94
+ container.registerInstance(PageRevisionsCache, pageRevisionsCacheFactory.getCache());
93
95
  container.registerInstance(PublishPageGateway, gateway);
94
96
  container.register(PublishPageRepository).inSingletonScope();
95
97
  container.register(external_PublishPageUseCase_js_PublishPageUseCase);
@@ -124,6 +126,7 @@ describe("PublishPage", ()=>{
124
126
  const container = new Container();
125
127
  container.registerInstance(PageListCache, pagesCache);
126
128
  container.registerInstance(FullPageCache, fullPageCache);
129
+ container.registerInstance(PageRevisionsCache, pageRevisionsCacheFactory.getCache());
127
130
  container.registerInstance(PublishPageGateway, gateway);
128
131
  container.register(PublishPageRepository).inSingletonScope();
129
132
  container.register(external_PublishPageUseCase_js_PublishPageUseCase);
@@ -136,6 +139,43 @@ describe("PublishPage", ()=>{
136
139
  expect(publishedItem?.id).toEqual("page-1#0001");
137
140
  expect(publishedItem?.status).toEqual(WbPageStatus.Draft);
138
141
  });
142
+ it("should publish the revision and unpublish the previously published one", async ()=>{
143
+ const revisionsCache = pageRevisionsCacheFactory.getCache();
144
+ revisionsCache.clear();
145
+ const makeRevision = (id, version, status)=>PageRevision.create({
146
+ id,
147
+ entryId: "page-1",
148
+ version,
149
+ status,
150
+ savedOn: "2026-09-21T00:00:00.000Z",
151
+ title: "Page 1",
152
+ locked: false,
153
+ createdBy: {
154
+ id: "admin",
155
+ displayName: "Admin",
156
+ type: "admin"
157
+ },
158
+ createdOn: "2026-09-21T00:00:00.000Z",
159
+ revisionDescription: void 0
160
+ });
161
+ revisionsCache.addItems([
162
+ makeRevision("page-1#0001", 1, WbPageStatus.Draft),
163
+ makeRevision("page-1#0002", 2, WbPageStatus.Published)
164
+ ]);
165
+ const container = new Container();
166
+ container.registerInstance(PageListCache, pagesCache);
167
+ container.registerInstance(FullPageCache, fullPageCache);
168
+ container.registerInstance(PageRevisionsCache, revisionsCache);
169
+ container.registerInstance(PublishPageGateway, gateway);
170
+ container.register(PublishPageRepository).inSingletonScope();
171
+ container.register(external_PublishPageUseCase_js_PublishPageUseCase);
172
+ const publishPage = container.resolve(PublishPageUseCase);
173
+ await publishPage.execute({
174
+ id: "page-1#0001"
175
+ });
176
+ expect(revisionsCache.getItem((r)=>"page-1#0001" === r.id)?.status).toEqual(WbPageStatus.Published);
177
+ expect(revisionsCache.getItem((r)=>"page-1#0002" === r.id)?.status).toEqual(WbPageStatus.Unpublished);
178
+ });
139
179
  });
140
180
 
141
181
  //# sourceMappingURL=PublishPage.test.js.map