@webiny/api-aco 6.3.0-beta.4 → 6.4.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/constants.js +2 -1
  2. package/constants.js.map +1 -1
  3. package/createAcoContext.js +69 -103
  4. package/createAcoContext.js.map +1 -1
  5. package/createAcoGraphQL.js +42 -43
  6. package/createAcoGraphQL.js.map +1 -1
  7. package/createAcoStorageOperations.js +5 -6
  8. package/createAcoStorageOperations.js.map +1 -1
  9. package/createAcoTasks.js +7 -8
  10. package/createAcoTasks.js.map +1 -1
  11. package/domain/folder/abstractions.js +2 -5
  12. package/domain/folder/abstractions.js.map +1 -1
  13. package/domain/folder/errors.js +42 -47
  14. package/domain/folder/errors.js.map +1 -1
  15. package/domain/folder/folder.model.js +52 -36
  16. package/domain/folder/folder.model.js.map +1 -1
  17. package/exports/api/aco/flp.js +0 -2
  18. package/exports/api/aco/folder.js +4 -6
  19. package/features/cms/decorators/CreateEntryRevisionFromWithFlpDecorator.js +27 -31
  20. package/features/cms/decorators/CreateEntryRevisionFromWithFlpDecorator.js.map +1 -1
  21. package/features/cms/decorators/CreateEntryWithFlpDecorator.js +22 -25
  22. package/features/cms/decorators/CreateEntryWithFlpDecorator.js.map +1 -1
  23. package/features/cms/decorators/DeleteEntryRevisionWithFlpDecorator.js +27 -31
  24. package/features/cms/decorators/DeleteEntryRevisionWithFlpDecorator.js.map +1 -1
  25. package/features/cms/decorators/DeleteEntryWithFlpDecorator.js +29 -33
  26. package/features/cms/decorators/DeleteEntryWithFlpDecorator.js.map +1 -1
  27. package/features/cms/decorators/GetEntryByIdWithFlpDecorator.js +25 -30
  28. package/features/cms/decorators/GetEntryByIdWithFlpDecorator.js.map +1 -1
  29. package/features/cms/decorators/GetEntryWithFlpDecorator.js +25 -30
  30. package/features/cms/decorators/GetEntryWithFlpDecorator.js.map +1 -1
  31. package/features/cms/decorators/GetLatestEntriesByIdsWithFlpDecorator.js +31 -35
  32. package/features/cms/decorators/GetLatestEntriesByIdsWithFlpDecorator.js.map +1 -1
  33. package/features/cms/decorators/GetPublishedEntriesByIdsWithFlpDecorator.js +31 -34
  34. package/features/cms/decorators/GetPublishedEntriesByIdsWithFlpDecorator.js.map +1 -1
  35. package/features/cms/decorators/ListDeletedEntriesWithFlpDecorator.js +27 -28
  36. package/features/cms/decorators/ListDeletedEntriesWithFlpDecorator.js.map +1 -1
  37. package/features/cms/decorators/ListEntriesWithFlpDecorator.js +27 -27
  38. package/features/cms/decorators/ListEntriesWithFlpDecorator.js.map +1 -1
  39. package/features/cms/decorators/ListLatestEntriesWithFlpDecorator.js +27 -28
  40. package/features/cms/decorators/ListLatestEntriesWithFlpDecorator.js.map +1 -1
  41. package/features/cms/decorators/ListPublishedEntriesWithFlpDecorator.js +27 -28
  42. package/features/cms/decorators/ListPublishedEntriesWithFlpDecorator.js.map +1 -1
  43. package/features/cms/decorators/MoveEntryWithFlpDecorator.js +37 -51
  44. package/features/cms/decorators/MoveEntryWithFlpDecorator.js.map +1 -1
  45. package/features/cms/decorators/UpdateEntryWithFlpDecorator.d.ts +1 -2
  46. package/features/cms/decorators/UpdateEntryWithFlpDecorator.js +27 -31
  47. package/features/cms/decorators/UpdateEntryWithFlpDecorator.js.map +1 -1
  48. package/features/cms/feature.js +19 -25
  49. package/features/cms/feature.js.map +1 -1
  50. package/features/cms/index.js +0 -2
  51. package/features/flp/CreateFlp/CreateFlpUseCase.js +26 -33
  52. package/features/flp/CreateFlp/CreateFlpUseCase.js.map +1 -1
  53. package/features/flp/CreateFlp/abstractions.js +2 -5
  54. package/features/flp/CreateFlp/abstractions.js.map +1 -1
  55. package/features/flp/CreateFlp/feature.js +7 -8
  56. package/features/flp/CreateFlp/feature.js.map +1 -1
  57. package/features/flp/CreateFlp/index.js +0 -2
  58. package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.js +27 -27
  59. package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.js.map +1 -1
  60. package/features/flp/CreateFlpOnFolderCreated/feature.js +6 -5
  61. package/features/flp/CreateFlpOnFolderCreated/feature.js.map +1 -1
  62. package/features/flp/CreateFlpOnFolderCreated/index.js +0 -2
  63. package/features/flp/DeleteFlp/DeleteFlpUseCase.js +17 -18
  64. package/features/flp/DeleteFlp/DeleteFlpUseCase.js.map +1 -1
  65. package/features/flp/DeleteFlp/abstractions.js +2 -5
  66. package/features/flp/DeleteFlp/abstractions.js.map +1 -1
  67. package/features/flp/DeleteFlp/feature.js +7 -8
  68. package/features/flp/DeleteFlp/feature.js.map +1 -1
  69. package/features/flp/DeleteFlp/index.js +0 -2
  70. package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.js +27 -27
  71. package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.js.map +1 -1
  72. package/features/flp/DeleteFlpOnFolderDeleted/feature.js +6 -5
  73. package/features/flp/DeleteFlpOnFolderDeleted/feature.js.map +1 -1
  74. package/features/flp/DeleteFlpOnFolderDeleted/index.js +0 -2
  75. package/features/flp/FolderLevelPermissions/FolderLevelPermissions.js +87 -108
  76. package/features/flp/FolderLevelPermissions/FolderLevelPermissions.js.map +1 -1
  77. package/features/flp/FolderLevelPermissions/abstractions.js +2 -2
  78. package/features/flp/FolderLevelPermissions/abstractions.js.map +1 -1
  79. package/features/flp/FolderLevelPermissions/feature.js +6 -5
  80. package/features/flp/FolderLevelPermissions/feature.js.map +1 -1
  81. package/features/flp/FolderLevelPermissions/index.js +0 -2
  82. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.js +14 -36
  83. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.js.map +1 -1
  84. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/ICanAccessFolder.js +0 -3
  85. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/index.js +0 -2
  86. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.js +12 -29
  87. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.js.map +1 -1
  88. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/ICanAccessFolderContent.js +0 -3
  89. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/index.js +0 -2
  90. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.js +5 -4
  91. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.js.map +1 -1
  92. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/ICanCreateFolderInRoot.js +0 -3
  93. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/index.js +0 -2
  94. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.js +5 -4
  95. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.js.map +1 -1
  96. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/ICheckNotInheritedPermissions.js +0 -3
  97. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/index.js +0 -2
  98. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.js +43 -66
  99. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.js.map +1 -1
  100. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.js +10 -9
  101. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.js.map +1 -1
  102. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.js +22 -33
  103. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.js.map +1 -1
  104. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/IGetDefaultPermissions.js +0 -3
  105. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/index.js +0 -2
  106. package/features/flp/FolderLevelPermissions/useCases/index.js +0 -2
  107. package/features/flp/GetFlp/GetFlpUseCase.js +8 -7
  108. package/features/flp/GetFlp/GetFlpUseCase.js.map +1 -1
  109. package/features/flp/GetFlp/abstractions.js +2 -2
  110. package/features/flp/GetFlp/abstractions.js.map +1 -1
  111. package/features/flp/GetFlp/feature.js +7 -8
  112. package/features/flp/GetFlp/feature.js.map +1 -1
  113. package/features/flp/GetFlp/index.js +0 -2
  114. package/features/flp/ListFlps/ListFlpsUseCase.js +8 -7
  115. package/features/flp/ListFlps/ListFlpsUseCase.js.map +1 -1
  116. package/features/flp/ListFlps/abstractions.js +2 -2
  117. package/features/flp/ListFlps/abstractions.js.map +1 -1
  118. package/features/flp/ListFlps/feature.js +7 -8
  119. package/features/flp/ListFlps/feature.js.map +1 -1
  120. package/features/flp/ListFlps/index.js +0 -2
  121. package/features/flp/UpdateFlp/UpdateFlpUseCase.js +133 -184
  122. package/features/flp/UpdateFlp/UpdateFlpUseCase.js.map +1 -1
  123. package/features/flp/UpdateFlp/abstractions.js +2 -5
  124. package/features/flp/UpdateFlp/abstractions.js.map +1 -1
  125. package/features/flp/UpdateFlp/feature.js +7 -8
  126. package/features/flp/UpdateFlp/feature.js.map +1 -1
  127. package/features/flp/UpdateFlp/index.js +0 -2
  128. package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.js +29 -29
  129. package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.js.map +1 -1
  130. package/features/flp/UpdateFlpOnFolderUpdated/feature.js +6 -5
  131. package/features/flp/UpdateFlpOnFolderUpdated/feature.js.map +1 -1
  132. package/features/flp/UpdateFlpOnFolderUpdated/index.js +0 -2
  133. package/features/folder/CreateFolder/CreateFolderRepository.js +67 -90
  134. package/features/folder/CreateFolder/CreateFolderRepository.js.map +1 -1
  135. package/features/folder/CreateFolder/CreateFolderUseCase.js +27 -30
  136. package/features/folder/CreateFolder/CreateFolderUseCase.js.map +1 -1
  137. package/features/folder/CreateFolder/abstractions.js +5 -22
  138. package/features/folder/CreateFolder/abstractions.js.map +1 -1
  139. package/features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.js +29 -34
  140. package/features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.js.map +1 -1
  141. package/features/folder/CreateFolder/events.js +16 -14
  142. package/features/folder/CreateFolder/events.js.map +1 -1
  143. package/features/folder/CreateFolder/feature.js +8 -7
  144. package/features/folder/CreateFolder/feature.js.map +1 -1
  145. package/features/folder/CreateFolder/index.js +1 -3
  146. package/features/folder/DeleteFolder/DeleteFolderRepository.js +22 -20
  147. package/features/folder/DeleteFolder/DeleteFolderRepository.js.map +1 -1
  148. package/features/folder/DeleteFolder/DeleteFolderUseCase.js +35 -43
  149. package/features/folder/DeleteFolder/DeleteFolderUseCase.js.map +1 -1
  150. package/features/folder/DeleteFolder/abstractions.js +5 -22
  151. package/features/folder/DeleteFolder/abstractions.js.map +1 -1
  152. package/features/folder/DeleteFolder/decorators/DeleteFolderWithFolderLevelPermissions.js +21 -20
  153. package/features/folder/DeleteFolder/decorators/DeleteFolderWithFolderLevelPermissions.js.map +1 -1
  154. package/features/folder/DeleteFolder/events.js +16 -14
  155. package/features/folder/DeleteFolder/events.js.map +1 -1
  156. package/features/folder/DeleteFolder/feature.js +8 -7
  157. package/features/folder/DeleteFolder/feature.js.map +1 -1
  158. package/features/folder/DeleteFolder/index.js +1 -3
  159. package/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js +43 -44
  160. package/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js.map +1 -1
  161. package/features/folder/EnsureFolderIsEmpty/abstractions.js +2 -2
  162. package/features/folder/EnsureFolderIsEmpty/abstractions.js.map +1 -1
  163. package/features/folder/EnsureFolderIsEmpty/feature.js +6 -5
  164. package/features/folder/EnsureFolderIsEmpty/feature.js.map +1 -1
  165. package/features/folder/EnsureFolderIsEmpty/index.js +0 -2
  166. package/features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.js +16 -20
  167. package/features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.js.map +1 -1
  168. package/features/folder/EnsureFolderIsEmptyOnDelete/feature.js +6 -12
  169. package/features/folder/EnsureFolderIsEmptyOnDelete/feature.js.map +1 -1
  170. package/features/folder/EnsureFolderIsEmptyOnDelete/index.js +0 -2
  171. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js +36 -44
  172. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js.map +1 -1
  173. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/feature.js +6 -5
  174. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/feature.js.map +1 -1
  175. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/index.js +0 -2
  176. package/features/folder/GetAncestors/GetAncestorsRepository.js +45 -75
  177. package/features/folder/GetAncestors/GetAncestorsRepository.js.map +1 -1
  178. package/features/folder/GetAncestors/GetAncestorsUseCase.js +14 -11
  179. package/features/folder/GetAncestors/GetAncestorsUseCase.js.map +1 -1
  180. package/features/folder/GetAncestors/abstractions.js +3 -14
  181. package/features/folder/GetAncestors/abstractions.js.map +1 -1
  182. package/features/folder/GetAncestors/feature.js +7 -6
  183. package/features/folder/GetAncestors/feature.js.map +1 -1
  184. package/features/folder/GetAncestors/index.js +0 -2
  185. package/features/folder/GetFolder/GetFolderRepository.js +21 -19
  186. package/features/folder/GetFolder/GetFolderRepository.js.map +1 -1
  187. package/features/folder/GetFolder/GetFolderUseCase.js +14 -11
  188. package/features/folder/GetFolder/GetFolderUseCase.js.map +1 -1
  189. package/features/folder/GetFolder/abstractions.js +5 -21
  190. package/features/folder/GetFolder/abstractions.js.map +1 -1
  191. package/features/folder/GetFolder/decorators/GetFolderWithFolderLevelPermissions.js +23 -26
  192. package/features/folder/GetFolder/decorators/GetFolderWithFolderLevelPermissions.js.map +1 -1
  193. package/features/folder/GetFolder/feature.js +8 -7
  194. package/features/folder/GetFolder/feature.js.map +1 -1
  195. package/features/folder/GetFolder/index.js +0 -2
  196. package/features/folder/GetFolderHierarchy/GetFolderHierarchyRepository.js +67 -86
  197. package/features/folder/GetFolderHierarchy/GetFolderHierarchyRepository.js.map +1 -1
  198. package/features/folder/GetFolderHierarchy/GetFolderHierarchyUseCase.js +14 -11
  199. package/features/folder/GetFolderHierarchy/GetFolderHierarchyUseCase.js.map +1 -1
  200. package/features/folder/GetFolderHierarchy/abstractions.js +3 -14
  201. package/features/folder/GetFolderHierarchy/abstractions.js.map +1 -1
  202. package/features/folder/GetFolderHierarchy/decorators/GetFolderHierarchyWithFolderLevelPermissions.js +55 -56
  203. package/features/folder/GetFolderHierarchy/decorators/GetFolderHierarchyWithFolderLevelPermissions.js.map +1 -1
  204. package/features/folder/GetFolderHierarchy/feature.js +8 -7
  205. package/features/folder/GetFolderHierarchy/feature.js.map +1 -1
  206. package/features/folder/GetFolderHierarchy/index.js +0 -2
  207. package/features/folder/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargetsUseCase.js +65 -58
  208. package/features/folder/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargetsUseCase.js.map +1 -1
  209. package/features/folder/ListFolderLevelPermissionsTargets/abstractions.js +2 -5
  210. package/features/folder/ListFolderLevelPermissionsTargets/abstractions.js.map +1 -1
  211. package/features/folder/ListFolderLevelPermissionsTargets/feature.js +6 -5
  212. package/features/folder/ListFolderLevelPermissionsTargets/feature.js.map +1 -1
  213. package/features/folder/ListFolderLevelPermissionsTargets/index.js +0 -2
  214. package/features/folder/ListFolders/ListFoldersRepository.js +39 -41
  215. package/features/folder/ListFolders/ListFoldersRepository.js.map +1 -1
  216. package/features/folder/ListFolders/ListFoldersUseCase.js +14 -11
  217. package/features/folder/ListFolders/ListFoldersUseCase.js.map +1 -1
  218. package/features/folder/ListFolders/abstractions.js +3 -14
  219. package/features/folder/ListFolders/abstractions.js.map +1 -1
  220. package/features/folder/ListFolders/decorators/ListFoldersWithFolderLevelPermissions.js +55 -67
  221. package/features/folder/ListFolders/decorators/ListFoldersWithFolderLevelPermissions.js.map +1 -1
  222. package/features/folder/ListFolders/feature.js +8 -7
  223. package/features/folder/ListFolders/feature.js.map +1 -1
  224. package/features/folder/ListFolders/index.js +0 -2
  225. package/features/folder/UpdateFolder/UpdateFolderRepository.js +66 -92
  226. package/features/folder/UpdateFolder/UpdateFolderRepository.js.map +1 -1
  227. package/features/folder/UpdateFolder/UpdateFolderUseCase.js +38 -45
  228. package/features/folder/UpdateFolder/UpdateFolderUseCase.js.map +1 -1
  229. package/features/folder/UpdateFolder/abstractions.js +5 -22
  230. package/features/folder/UpdateFolder/abstractions.js.map +1 -1
  231. package/features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.js +45 -64
  232. package/features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.js.map +1 -1
  233. package/features/folder/UpdateFolder/events.js +16 -14
  234. package/features/folder/UpdateFolder/events.js.map +1 -1
  235. package/features/folder/UpdateFolder/feature.js +8 -7
  236. package/features/folder/UpdateFolder/feature.js.map +1 -1
  237. package/features/folder/UpdateFolder/index.js +0 -2
  238. package/features/folder/shared/EntryToFolderMapper.js +20 -19
  239. package/features/folder/shared/EntryToFolderMapper.js.map +1 -1
  240. package/features/folder/shared/abstractions.js +2 -2
  241. package/features/folder/shared/abstractions.js.map +1 -1
  242. package/filter/filter.crud.js +28 -31
  243. package/filter/filter.crud.js.map +1 -1
  244. package/filter/filter.gql.js +32 -48
  245. package/filter/filter.gql.js.map +1 -1
  246. package/filter/filter.model.js +44 -35
  247. package/filter/filter.model.js.map +1 -1
  248. package/filter/filter.so.js +73 -93
  249. package/filter/filter.so.js.map +1 -1
  250. package/filter/filter.types.js +5 -4
  251. package/filter/filter.types.js.map +1 -1
  252. package/flp/flp.crud.js +69 -86
  253. package/flp/flp.crud.js.map +1 -1
  254. package/flp/flp.so.js +162 -199
  255. package/flp/flp.so.js.map +1 -1
  256. package/flp/flp.types.js +0 -3
  257. package/flp/index.js +0 -2
  258. package/flp/tasks/createFlp.task.js +26 -27
  259. package/flp/tasks/createFlp.task.js.map +1 -1
  260. package/flp/tasks/deleteFlp.task.js +26 -27
  261. package/flp/tasks/deleteFlp.task.js.map +1 -1
  262. package/flp/tasks/index.js +13 -12
  263. package/flp/tasks/index.js.map +1 -1
  264. package/flp/tasks/syncFlp.task.js +83 -112
  265. package/flp/tasks/syncFlp.task.js.map +1 -1
  266. package/flp/tasks/updateFlp.task.js +33 -32
  267. package/flp/tasks/updateFlp.task.js.map +1 -1
  268. package/folder/createFolderModelModifier.js +50 -50
  269. package/folder/createFolderModelModifier.js.map +1 -1
  270. package/folder/createFolderTypeDefs.js +39 -50
  271. package/folder/createFolderTypeDefs.js.map +1 -1
  272. package/folder/folder.gql.js +100 -133
  273. package/folder/folder.gql.js.map +1 -1
  274. package/folder/folder.types.js +0 -3
  275. package/index.js +7 -4
  276. package/index.js.map +1 -1
  277. package/package.json +24 -24
  278. package/types.js +5 -4
  279. package/types.js.map +1 -1
  280. package/utils/FoldersCacheFactory.js +20 -19
  281. package/utils/FoldersCacheFactory.js.map +1 -1
  282. package/utils/ListCache.js +20 -19
  283. package/utils/ListCache.js.map +1 -1
  284. package/utils/Path.js +5 -6
  285. package/utils/Path.js.map +1 -1
  286. package/utils/compress.js +8 -7
  287. package/utils/compress.js.map +1 -1
  288. package/utils/createListSort.js +4 -7
  289. package/utils/createListSort.js.map +1 -1
  290. package/utils/createOperationsWrapper.js +12 -19
  291. package/utils/createOperationsWrapper.js.map +1 -1
  292. package/utils/decorators/CmsEntriesCrudDecorators.js +165 -196
  293. package/utils/decorators/CmsEntriesCrudDecorators.js.map +1 -1
  294. package/utils/decorators/FilterEntriesByFolderFactory.js +18 -19
  295. package/utils/decorators/FilterEntriesByFolderFactory.js.map +1 -1
  296. package/utils/decorators/ListEntriesFactory.js +65 -98
  297. package/utils/decorators/ListEntriesFactory.js.map +1 -1
  298. package/utils/decorators/hasRootFolderId.js +6 -12
  299. package/utils/decorators/hasRootFolderId.js.map +1 -1
  300. package/utils/decorators/isPageModel.js +5 -10
  301. package/utils/decorators/isPageModel.js.map +1 -1
  302. package/utils/ensureAuthentication.js +6 -7
  303. package/utils/ensureAuthentication.js.map +1 -1
  304. package/utils/pickEntryFieldValues.js +24 -18
  305. package/utils/pickEntryFieldValues.js.map +1 -1
  306. package/utils/resolve.js +7 -6
  307. package/utils/resolve.js.map +1 -1
  308. package/exports/api/aco/flp.js.map +0 -1
  309. package/exports/api/aco/folder.js.map +0 -1
  310. package/features/cms/index.js.map +0 -1
  311. package/features/flp/CreateFlp/index.js.map +0 -1
  312. package/features/flp/CreateFlpOnFolderCreated/index.js.map +0 -1
  313. package/features/flp/DeleteFlp/index.js.map +0 -1
  314. package/features/flp/DeleteFlpOnFolderDeleted/index.js.map +0 -1
  315. package/features/flp/FolderLevelPermissions/index.js.map +0 -1
  316. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/ICanAccessFolder.js.map +0 -1
  317. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/index.js.map +0 -1
  318. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/ICanAccessFolderContent.js.map +0 -1
  319. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/index.js.map +0 -1
  320. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/ICanCreateFolderInRoot.js.map +0 -1
  321. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/index.js.map +0 -1
  322. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/ICheckNotInheritedPermissions.js.map +0 -1
  323. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/index.js.map +0 -1
  324. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/IGetDefaultPermissions.js.map +0 -1
  325. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/index.js.map +0 -1
  326. package/features/flp/FolderLevelPermissions/useCases/index.js.map +0 -1
  327. package/features/flp/GetFlp/index.js.map +0 -1
  328. package/features/flp/ListFlps/index.js.map +0 -1
  329. package/features/flp/UpdateFlp/index.js.map +0 -1
  330. package/features/flp/UpdateFlpOnFolderUpdated/index.js.map +0 -1
  331. package/features/folder/CreateFolder/index.js.map +0 -1
  332. package/features/folder/DeleteFolder/index.js.map +0 -1
  333. package/features/folder/EnsureFolderIsEmpty/index.js.map +0 -1
  334. package/features/folder/EnsureFolderIsEmptyOnDelete/index.js.map +0 -1
  335. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/index.js.map +0 -1
  336. package/features/folder/GetAncestors/index.js.map +0 -1
  337. package/features/folder/GetFolder/index.js.map +0 -1
  338. package/features/folder/GetFolderHierarchy/index.js.map +0 -1
  339. package/features/folder/ListFolderLevelPermissionsTargets/index.js.map +0 -1
  340. package/features/folder/ListFolders/index.js.map +0 -1
  341. package/features/folder/UpdateFolder/index.js.map +0 -1
  342. package/flp/flp.types.js.map +0 -1
  343. package/flp/index.js.map +0 -1
  344. package/folder/folder.types.js.map +0 -1
@@ -1,56 +1,55 @@
1
1
  import { FolderLevelPermissions } from "../../flp/FolderLevelPermissions/index.js";
2
2
  import { ListFoldersUseCase } from "../ListFolders/index.js";
3
- import { EnsureFolderIsEmpty as Abstraction } from "./abstractions.js";
3
+ import { EnsureFolderIsEmpty } from "./abstractions.js";
4
4
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
5
5
  import { FolderNotAuthorizedError, FolderNotEmptyError } from "../../../domain/folder/errors.js";
6
6
  import { Result } from "@webiny/feature/api";
7
7
  class EnsureFolderIsEmptyImpl {
8
- constructor(identityContext, folderLevelPermissions, listFoldersUseCase) {
9
- this.identityContext = identityContext;
10
- this.folderLevelPermissions = folderLevelPermissions;
11
- this.listFoldersUseCase = listFoldersUseCase;
12
- }
13
- async execute(type, id, hasContentCallback) {
14
- const hasFoldersCallback = async () => {
15
- const result = await this.listFoldersUseCase.execute({
16
- where: {
17
- type,
18
- parentId: id
19
- },
20
- limit: 1
21
- });
22
- const {
23
- folders
24
- } = result.value;
25
- return folders.length > 0;
26
- };
27
- const [hasFolders, hasContent] = await Promise.all([hasFoldersCallback(), hasContentCallback()]);
28
- if (hasFolders || hasContent) {
29
- return Result.fail(new FolderNotEmptyError());
8
+ constructor(identityContext, folderLevelPermissions, listFoldersUseCase){
9
+ this.identityContext = identityContext;
10
+ this.folderLevelPermissions = folderLevelPermissions;
11
+ this.listFoldersUseCase = listFoldersUseCase;
30
12
  }
31
-
32
- // Let's also check if there are folders / content that are not visible because of folder permissions.
33
- if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) {
34
- // If folder level permissions are not enabled, we can skip this check. This is because
35
- // in that case, all folders and content are visible to the user.
36
- return Result.ok();
37
- }
38
- const [hasInvisibleFolders, hasInvisibleContent] = await this.identityContext.withoutAuthorization(async () => {
39
- const [hasFolders, hasContent] = await Promise.all([hasFoldersCallback(), hasContentCallback()]);
40
- return [hasFolders, hasContent];
41
- });
42
-
43
- // In case there are invisible folders or content, we'll throw a different error.
44
- // This is to prevent users from deleting folders that contain content they can't see.
45
- if (hasInvisibleFolders || hasInvisibleContent) {
46
- return Result.fail(new FolderNotAuthorizedError());
13
+ async execute(type, id, hasContentCallback) {
14
+ const hasFoldersCallback = async ()=>{
15
+ const result = await this.listFoldersUseCase.execute({
16
+ where: {
17
+ type,
18
+ parentId: id
19
+ },
20
+ limit: 1
21
+ });
22
+ const { folders } = result.value;
23
+ return folders.length > 0;
24
+ };
25
+ const [hasFolders, hasContent] = await Promise.all([
26
+ hasFoldersCallback(),
27
+ hasContentCallback()
28
+ ]);
29
+ if (hasFolders || hasContent) return Result.fail(new FolderNotEmptyError());
30
+ if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) return Result.ok();
31
+ const [hasInvisibleFolders, hasInvisibleContent] = await this.identityContext.withoutAuthorization(async ()=>{
32
+ const [hasFolders, hasContent] = await Promise.all([
33
+ hasFoldersCallback(),
34
+ hasContentCallback()
35
+ ]);
36
+ return [
37
+ hasFolders,
38
+ hasContent
39
+ ];
40
+ });
41
+ if (hasInvisibleFolders || hasInvisibleContent) return Result.fail(new FolderNotAuthorizedError());
42
+ return Result.ok();
47
43
  }
48
- return Result.ok();
49
- }
50
44
  }
51
- export const EnsureFolderIsEmpty = Abstraction.createImplementation({
52
- implementation: EnsureFolderIsEmptyImpl,
53
- dependencies: [IdentityContext, FolderLevelPermissions, ListFoldersUseCase]
45
+ const EnsureFolderIsEmpty_EnsureFolderIsEmpty = EnsureFolderIsEmpty.createImplementation({
46
+ implementation: EnsureFolderIsEmptyImpl,
47
+ dependencies: [
48
+ IdentityContext,
49
+ FolderLevelPermissions,
50
+ ListFoldersUseCase
51
+ ]
54
52
  });
53
+ export { EnsureFolderIsEmpty_EnsureFolderIsEmpty as EnsureFolderIsEmpty };
55
54
 
56
55
  //# sourceMappingURL=EnsureFolderIsEmpty.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["FolderLevelPermissions","ListFoldersUseCase","EnsureFolderIsEmpty","Abstraction","IdentityContext","FolderNotAuthorizedError","FolderNotEmptyError","Result","EnsureFolderIsEmptyImpl","constructor","identityContext","folderLevelPermissions","listFoldersUseCase","execute","type","id","hasContentCallback","hasFoldersCallback","result","where","parentId","limit","folders","value","length","hasFolders","hasContent","Promise","all","fail","canUseFolderLevelPermissions","ok","hasInvisibleFolders","hasInvisibleContent","withoutAuthorization","createImplementation","implementation","dependencies"],"sources":["EnsureFolderIsEmpty.ts"],"sourcesContent":["import { FolderLevelPermissions } from \"~/features/flp/FolderLevelPermissions/index.js\";\nimport { ListFoldersUseCase } from \"~/features/folder/ListFolders/index.js\";\nimport { EnsureFolderIsEmpty as Abstraction } from \"~/features/folder/EnsureFolderIsEmpty/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { FolderNotAuthorizedError, FolderNotEmptyError } from \"~/domain/folder/errors.js\";\nimport { Result } from \"@webiny/feature/api\";\n\nclass EnsureFolderIsEmptyImpl implements Abstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private folderLevelPermissions: FolderLevelPermissions.Interface,\n private listFoldersUseCase: ListFoldersUseCase.Interface\n ) {}\n\n async execute(\n type: string,\n id: string,\n hasContentCallback: Abstraction.HasContentCallback\n ): Abstraction.Return {\n const hasFoldersCallback = async () => {\n const result = await this.listFoldersUseCase.execute({\n where: {\n type,\n parentId: id\n },\n limit: 1\n });\n\n const { folders } = result.value;\n\n return folders.length > 0;\n };\n\n const [hasFolders, hasContent] = await Promise.all([\n hasFoldersCallback(),\n hasContentCallback()\n ]);\n\n if (hasFolders || hasContent) {\n return Result.fail(new FolderNotEmptyError());\n }\n\n // Let's also check if there are folders / content that are not visible because of folder permissions.\n if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) {\n // If folder level permissions are not enabled, we can skip this check. This is because\n // in that case, all folders and content are visible to the user.\n return Result.ok();\n }\n\n const [hasInvisibleFolders, hasInvisibleContent] =\n await this.identityContext.withoutAuthorization(async () => {\n const [hasFolders, hasContent] = await Promise.all([\n hasFoldersCallback(),\n hasContentCallback()\n ]);\n return [hasFolders, hasContent];\n });\n\n // In case there are invisible folders or content, we'll throw a different error.\n // This is to prevent users from deleting folders that contain content they can't see.\n if (hasInvisibleFolders || hasInvisibleContent) {\n return Result.fail(new FolderNotAuthorizedError());\n }\n\n return Result.ok();\n }\n}\n\nexport const EnsureFolderIsEmpty = Abstraction.createImplementation({\n implementation: EnsureFolderIsEmptyImpl,\n dependencies: [IdentityContext, FolderLevelPermissions, ListFoldersUseCase]\n});\n"],"mappings":"AAAA,SAASA,sBAAsB;AAC/B,SAASC,kBAAkB;AAC3B,SAASC,mBAAmB,IAAIC,WAAW;AAC3C,SAASC,eAAe,QAAQ,6DAA6D;AAC7F,SAASC,wBAAwB,EAAEC,mBAAmB;AACtD,SAASC,MAAM,QAAQ,qBAAqB;AAE5C,MAAMC,uBAAuB,CAAkC;EAC3DC,WAAWA,CACCC,eAA0C,EAC1CC,sBAAwD,EACxDC,kBAAgD,EAC1D;IAAA,KAHUF,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,sBAAwD,GAAxDA,sBAAwD;IAAA,KACxDC,kBAAgD,GAAhDA,kBAAgD;EACzD;EAEH,MAAMC,OAAOA,CACTC,IAAY,EACZC,EAAU,EACVC,kBAAkD,EAChC;IAClB,MAAMC,kBAAkB,GAAG,MAAAA,CAAA,KAAY;MACnC,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACN,kBAAkB,CAACC,OAAO,CAAC;QACjDM,KAAK,EAAE;UACHL,IAAI;UACJM,QAAQ,EAAEL;QACd,CAAC;QACDM,KAAK,EAAE;MACX,CAAC,CAAC;MAEF,MAAM;QAAEC;MAAQ,CAAC,GAAGJ,MAAM,CAACK,KAAK;MAEhC,OAAOD,OAAO,CAACE,MAAM,GAAG,CAAC;IAC7B,CAAC;IAED,MAAM,CAACC,UAAU,EAAEC,UAAU,CAAC,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CAC/CX,kBAAkB,CAAC,CAAC,EACpBD,kBAAkB,CAAC,CAAC,CACvB,CAAC;IAEF,IAAIS,UAAU,IAAIC,UAAU,EAAE;MAC1B,OAAOnB,MAAM,CAACsB,IAAI,CAAC,IAAIvB,mBAAmB,CAAC,CAAC,CAAC;IACjD;;IAEA;IACA,IAAI,CAAC,IAAI,CAACK,sBAAsB,CAACmB,4BAA4B,CAAC,CAAC,EAAE;MAC7D;MACA;MACA,OAAOvB,MAAM,CAACwB,EAAE,CAAC,CAAC;IACtB;IAEA,MAAM,CAACC,mBAAmB,EAAEC,mBAAmB,CAAC,GAC5C,MAAM,IAAI,CAACvB,eAAe,CAACwB,oBAAoB,CAAC,YAAY;MACxD,MAAM,CAACT,UAAU,EAAEC,UAAU,CAAC,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CAC/CX,kBAAkB,CAAC,CAAC,EACpBD,kBAAkB,CAAC,CAAC,CACvB,CAAC;MACF,OAAO,CAACS,UAAU,EAAEC,UAAU,CAAC;IACnC,CAAC,CAAC;;IAEN;IACA;IACA,IAAIM,mBAAmB,IAAIC,mBAAmB,EAAE;MAC5C,OAAO1B,MAAM,CAACsB,IAAI,CAAC,IAAIxB,wBAAwB,CAAC,CAAC,CAAC;IACtD;IAEA,OAAOE,MAAM,CAACwB,EAAE,CAAC,CAAC;EACtB;AACJ;AAEA,OAAO,MAAM7B,mBAAmB,GAAGC,WAAW,CAACgC,oBAAoB,CAAC;EAChEC,cAAc,EAAE5B,uBAAuB;EACvC6B,YAAY,EAAE,CAACjC,eAAe,EAAEJ,sBAAsB,EAAEC,kBAAkB;AAC9E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js","sources":["../../../../src/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.ts"],"sourcesContent":["import { FolderLevelPermissions } from \"~/features/flp/FolderLevelPermissions/index.js\";\nimport { ListFoldersUseCase } from \"~/features/folder/ListFolders/index.js\";\nimport { EnsureFolderIsEmpty as Abstraction } from \"~/features/folder/EnsureFolderIsEmpty/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { FolderNotAuthorizedError, FolderNotEmptyError } from \"~/domain/folder/errors.js\";\nimport { Result } from \"@webiny/feature/api\";\n\nclass EnsureFolderIsEmptyImpl implements Abstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private folderLevelPermissions: FolderLevelPermissions.Interface,\n private listFoldersUseCase: ListFoldersUseCase.Interface\n ) {}\n\n async execute(\n type: string,\n id: string,\n hasContentCallback: Abstraction.HasContentCallback\n ): Abstraction.Return {\n const hasFoldersCallback = async () => {\n const result = await this.listFoldersUseCase.execute({\n where: {\n type,\n parentId: id\n },\n limit: 1\n });\n\n const { folders } = result.value;\n\n return folders.length > 0;\n };\n\n const [hasFolders, hasContent] = await Promise.all([\n hasFoldersCallback(),\n hasContentCallback()\n ]);\n\n if (hasFolders || hasContent) {\n return Result.fail(new FolderNotEmptyError());\n }\n\n // Let's also check if there are folders / content that are not visible because of folder permissions.\n if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) {\n // If folder level permissions are not enabled, we can skip this check. This is because\n // in that case, all folders and content are visible to the user.\n return Result.ok();\n }\n\n const [hasInvisibleFolders, hasInvisibleContent] =\n await this.identityContext.withoutAuthorization(async () => {\n const [hasFolders, hasContent] = await Promise.all([\n hasFoldersCallback(),\n hasContentCallback()\n ]);\n return [hasFolders, hasContent];\n });\n\n // In case there are invisible folders or content, we'll throw a different error.\n // This is to prevent users from deleting folders that contain content they can't see.\n if (hasInvisibleFolders || hasInvisibleContent) {\n return Result.fail(new FolderNotAuthorizedError());\n }\n\n return Result.ok();\n }\n}\n\nexport const EnsureFolderIsEmpty = Abstraction.createImplementation({\n implementation: EnsureFolderIsEmptyImpl,\n dependencies: [IdentityContext, FolderLevelPermissions, ListFoldersUseCase]\n});\n"],"names":["EnsureFolderIsEmptyImpl","identityContext","folderLevelPermissions","listFoldersUseCase","type","id","hasContentCallback","hasFoldersCallback","result","folders","hasFolders","hasContent","Promise","Result","FolderNotEmptyError","hasInvisibleFolders","hasInvisibleContent","FolderNotAuthorizedError","EnsureFolderIsEmpty","Abstraction","IdentityContext","FolderLevelPermissions","ListFoldersUseCase"],"mappings":";;;;;;AAOA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,sBAAwD,EACxDC,kBAAgD,CAC1D;aAHUF,eAAe,GAAfA;aACAC,sBAAsB,GAAtBA;aACAC,kBAAkB,GAAlBA;IACT;IAEH,MAAM,QACFC,IAAY,EACZC,EAAU,EACVC,kBAAkD,EAChC;QAClB,MAAMC,qBAAqB;YACvB,MAAMC,SAAS,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBACjD,OAAO;oBACHJ;oBACA,UAAUC;gBACd;gBACA,OAAO;YACX;YAEA,MAAM,EAAEI,OAAO,EAAE,GAAGD,OAAO,KAAK;YAEhC,OAAOC,QAAQ,MAAM,GAAG;QAC5B;QAEA,MAAM,CAACC,YAAYC,WAAW,GAAG,MAAMC,QAAQ,GAAG,CAAC;YAC/CL;YACAD;SACH;QAED,IAAII,cAAcC,YACd,OAAOE,OAAO,IAAI,CAAC,IAAIC;QAI3B,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,4BAA4B,IAGzD,OAAOD,OAAO,EAAE;QAGpB,MAAM,CAACE,qBAAqBC,oBAAoB,GAC5C,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC;YAC5C,MAAM,CAACN,YAAYC,WAAW,GAAG,MAAMC,QAAQ,GAAG,CAAC;gBAC/CL;gBACAD;aACH;YACD,OAAO;gBAACI;gBAAYC;aAAW;QACnC;QAIJ,IAAII,uBAAuBC,qBACvB,OAAOH,OAAO,IAAI,CAAC,IAAII;QAG3B,OAAOJ,OAAO,EAAE;IACpB;AACJ;AAEO,MAAMK,0CAAsBC,oBAAAA,oBAAgC,CAAC;IAChE,gBAAgBnB;IAChB,cAAc;QAACoB;QAAiBC;QAAwBC;KAAmB;AAC/E"}
@@ -1,5 +1,5 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
- /** Verify a folder has no children before deletion. */
3
- export const EnsureFolderIsEmpty = createAbstraction("EnsureFolderIsEmpty");
2
+ const EnsureFolderIsEmpty = createAbstraction("EnsureFolderIsEmpty");
3
+ export { EnsureFolderIsEmpty };
4
4
 
5
5
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","EnsureFolderIsEmpty"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport { FolderNotAuthorizedError, FolderNotEmptyError } from \"~/domain/folder/errors.js\";\n\nexport interface IHasContentCallback {\n (): boolean | Promise<boolean>;\n}\n\nexport interface IEnsureFolderIsEmpty {\n execute(\n type: string,\n id: string,\n hasContentCallback: IHasContentCallback\n ): Promise<Result<void, UseCaseError>>;\n}\n\nexport interface IEnsureFolderIsEmptyError {\n notAuthorized: FolderNotAuthorizedError;\n notEmpty: FolderNotEmptyError;\n}\n\ntype UseCaseError = IEnsureFolderIsEmptyError[keyof IEnsureFolderIsEmptyError];\n\n/** Verify a folder has no children before deletion. */\nexport const EnsureFolderIsEmpty = createAbstraction<IEnsureFolderIsEmpty>(\"EnsureFolderIsEmpty\");\n\nexport namespace EnsureFolderIsEmpty {\n export type Interface = IEnsureFolderIsEmpty;\n export type HasContentCallback = IHasContentCallback;\n export type Return = Promise<Result<void, UseCaseError>>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAgB,qBAAqB;AAsB/D;AACA,OAAO,MAAMC,mBAAmB,GAAGD,iBAAiB,CAAuB,qBAAqB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/folder/EnsureFolderIsEmpty/abstractions.js","sources":["../../../../src/features/folder/EnsureFolderIsEmpty/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport { FolderNotAuthorizedError, FolderNotEmptyError } from \"~/domain/folder/errors.js\";\n\nexport interface IHasContentCallback {\n (): boolean | Promise<boolean>;\n}\n\nexport interface IEnsureFolderIsEmpty {\n execute(\n type: string,\n id: string,\n hasContentCallback: IHasContentCallback\n ): Promise<Result<void, UseCaseError>>;\n}\n\nexport interface IEnsureFolderIsEmptyError {\n notAuthorized: FolderNotAuthorizedError;\n notEmpty: FolderNotEmptyError;\n}\n\ntype UseCaseError = IEnsureFolderIsEmptyError[keyof IEnsureFolderIsEmptyError];\n\n/** Verify a folder has no children before deletion. */\nexport const EnsureFolderIsEmpty = createAbstraction<IEnsureFolderIsEmpty>(\"EnsureFolderIsEmpty\");\n\nexport namespace EnsureFolderIsEmpty {\n export type Interface = IEnsureFolderIsEmpty;\n export type HasContentCallback = IHasContentCallback;\n export type Return = Promise<Result<void, UseCaseError>>;\n}\n"],"names":["EnsureFolderIsEmpty","createAbstraction"],"mappings":";AAuBO,MAAMA,sBAAsBC,kBAAwC"}
@@ -1,10 +1,11 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { EnsureFolderIsEmpty } from "./EnsureFolderIsEmpty.js";
3
- export const EnsureFolderIsEmptyFeature = createFeature({
4
- name: "EnsureFolderIsEmptyFeature",
5
- register(container) {
6
- container.register(EnsureFolderIsEmpty);
7
- }
3
+ const EnsureFolderIsEmptyFeature = createFeature({
4
+ name: "EnsureFolderIsEmptyFeature",
5
+ register (container) {
6
+ container.register(EnsureFolderIsEmpty);
7
+ }
8
8
  });
9
+ export { EnsureFolderIsEmptyFeature };
9
10
 
10
11
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","EnsureFolderIsEmpty","EnsureFolderIsEmptyFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { EnsureFolderIsEmpty } from \"./EnsureFolderIsEmpty.js\";\n\nexport const EnsureFolderIsEmptyFeature = createFeature({\n name: \"EnsureFolderIsEmptyFeature\",\n register(container) {\n container.register(EnsureFolderIsEmpty);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,mBAAmB;AAE5B,OAAO,MAAMC,0BAA0B,GAAGF,aAAa,CAAC;EACpDG,IAAI,EAAE,4BAA4B;EAClCC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,mBAAmB,CAAC;EAC3C;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/folder/EnsureFolderIsEmpty/feature.js","sources":["../../../../src/features/folder/EnsureFolderIsEmpty/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { EnsureFolderIsEmpty } from \"./EnsureFolderIsEmpty.js\";\n\nexport const EnsureFolderIsEmptyFeature = createFeature({\n name: \"EnsureFolderIsEmptyFeature\",\n register(container) {\n container.register(EnsureFolderIsEmpty);\n }\n});\n"],"names":["EnsureFolderIsEmptyFeature","createFeature","container","EnsureFolderIsEmpty"],"mappings":";;AAGO,MAAMA,6BAA6BC,cAAc;IACpD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
@@ -1,3 +1 @@
1
1
  export { EnsureFolderIsEmpty } from "./abstractions.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -2,28 +2,24 @@ import { WebinyError } from "@webiny/error";
2
2
  import { FolderBeforeDeleteEventHandler } from "../DeleteFolder/abstractions.js";
3
3
  import { EnsureFolderIsEmpty } from "../EnsureFolderIsEmpty/abstractions.js";
4
4
  class GenericFolderBeforeDeleteHandlerImpl {
5
- constructor(ensureFolderIsEmpty) {
6
- this.ensureFolderIsEmpty = ensureFolderIsEmpty;
7
- }
8
- async handle(event) {
9
- const {
10
- folder
11
- } = event.payload;
12
- const result = await this.ensureFolderIsEmpty.execute(folder.type, folder.id,
13
- // We can only check if a folder has child folders.
14
- // Content is controlled by individual apps, so content checks are implemented there.
15
- () => false);
16
- if (result.isFail()) {
17
- throw WebinyError.from(result.error, {
18
- message: "Error while ensuring folder is empty before delete.",
19
- code: "ACO_BEFORE_FOLDER_DELETE_FILE_HANDLER"
20
- });
5
+ constructor(ensureFolderIsEmpty){
6
+ this.ensureFolderIsEmpty = ensureFolderIsEmpty;
7
+ }
8
+ async handle(event) {
9
+ const { folder } = event.payload;
10
+ const result = await this.ensureFolderIsEmpty.execute(folder.type, folder.id, ()=>false);
11
+ if (result.isFail()) throw WebinyError.from(result.error, {
12
+ message: "Error while ensuring folder is empty before delete.",
13
+ code: "ACO_BEFORE_FOLDER_DELETE_FILE_HANDLER"
14
+ });
21
15
  }
22
- }
23
16
  }
24
- export const GenericFolderBeforeDeleteHandler = FolderBeforeDeleteEventHandler.createImplementation({
25
- implementation: GenericFolderBeforeDeleteHandlerImpl,
26
- dependencies: [EnsureFolderIsEmpty]
17
+ const GenericFolderBeforeDeleteHandler = FolderBeforeDeleteEventHandler.createImplementation({
18
+ implementation: GenericFolderBeforeDeleteHandlerImpl,
19
+ dependencies: [
20
+ EnsureFolderIsEmpty
21
+ ]
27
22
  });
23
+ export { GenericFolderBeforeDeleteHandler };
28
24
 
29
25
  //# sourceMappingURL=GenericFolderBeforeDeleteHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["WebinyError","FolderBeforeDeleteEventHandler","EnsureFolderIsEmpty","GenericFolderBeforeDeleteHandlerImpl","constructor","ensureFolderIsEmpty","handle","event","folder","payload","result","execute","type","id","isFail","from","error","message","code","GenericFolderBeforeDeleteHandler","createImplementation","implementation","dependencies"],"sources":["GenericFolderBeforeDeleteHandler.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { FolderBeforeDeleteEventHandler } from \"~/features/folder/DeleteFolder/abstractions.js\";\nimport type { FolderBeforeDeleteEvent } from \"~/features/folder/DeleteFolder/events.js\";\nimport { EnsureFolderIsEmpty } from \"~/features/folder/EnsureFolderIsEmpty/abstractions.js\";\n\nclass GenericFolderBeforeDeleteHandlerImpl implements FolderBeforeDeleteEventHandler.Interface {\n constructor(private ensureFolderIsEmpty: EnsureFolderIsEmpty.Interface) {}\n\n async handle(event: FolderBeforeDeleteEvent): Promise<void> {\n const { folder } = event.payload;\n\n const result = await this.ensureFolderIsEmpty.execute(\n folder.type,\n folder.id,\n // We can only check if a folder has child folders.\n // Content is controlled by individual apps, so content checks are implemented there.\n () => false\n );\n\n if (result.isFail()) {\n throw WebinyError.from(result.error, {\n message: \"Error while ensuring folder is empty before delete.\",\n code: \"ACO_BEFORE_FOLDER_DELETE_FILE_HANDLER\"\n });\n }\n }\n}\n\nexport const GenericFolderBeforeDeleteHandler = FolderBeforeDeleteEventHandler.createImplementation(\n {\n implementation: GenericFolderBeforeDeleteHandlerImpl,\n dependencies: [EnsureFolderIsEmpty]\n }\n);\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,eAAe;AAC3C,SAASC,8BAA8B;AAEvC,SAASC,mBAAmB;AAE5B,MAAMC,oCAAoC,CAAqD;EAC3FC,WAAWA,CAASC,mBAAkD,EAAE;IAAA,KAApDA,mBAAkD,GAAlDA,mBAAkD;EAAG;EAEzE,MAAMC,MAAMA,CAACC,KAA8B,EAAiB;IACxD,MAAM;MAAEC;IAAO,CAAC,GAAGD,KAAK,CAACE,OAAO;IAEhC,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACL,mBAAmB,CAACM,OAAO,CACjDH,MAAM,CAACI,IAAI,EACXJ,MAAM,CAACK,EAAE;IACT;IACA;IACA,MAAM,KACV,CAAC;IAED,IAAIH,MAAM,CAACI,MAAM,CAAC,CAAC,EAAE;MACjB,MAAMd,WAAW,CAACe,IAAI,CAACL,MAAM,CAACM,KAAK,EAAE;QACjCC,OAAO,EAAE,qDAAqD;QAC9DC,IAAI,EAAE;MACV,CAAC,CAAC;IACN;EACJ;AACJ;AAEA,OAAO,MAAMC,gCAAgC,GAAGlB,8BAA8B,CAACmB,oBAAoB,CAC/F;EACIC,cAAc,EAAElB,oCAAoC;EACpDmB,YAAY,EAAE,CAACpB,mBAAmB;AACtC,CACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.js","sources":["../../../../src/features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { FolderBeforeDeleteEventHandler } from \"~/features/folder/DeleteFolder/abstractions.js\";\nimport type { FolderBeforeDeleteEvent } from \"~/features/folder/DeleteFolder/events.js\";\nimport { EnsureFolderIsEmpty } from \"~/features/folder/EnsureFolderIsEmpty/abstractions.js\";\n\nclass GenericFolderBeforeDeleteHandlerImpl implements FolderBeforeDeleteEventHandler.Interface {\n constructor(private ensureFolderIsEmpty: EnsureFolderIsEmpty.Interface) {}\n\n async handle(event: FolderBeforeDeleteEvent): Promise<void> {\n const { folder } = event.payload;\n\n const result = await this.ensureFolderIsEmpty.execute(\n folder.type,\n folder.id,\n // We can only check if a folder has child folders.\n // Content is controlled by individual apps, so content checks are implemented there.\n () => false\n );\n\n if (result.isFail()) {\n throw WebinyError.from(result.error, {\n message: \"Error while ensuring folder is empty before delete.\",\n code: \"ACO_BEFORE_FOLDER_DELETE_FILE_HANDLER\"\n });\n }\n }\n}\n\nexport const GenericFolderBeforeDeleteHandler = FolderBeforeDeleteEventHandler.createImplementation(\n {\n implementation: GenericFolderBeforeDeleteHandlerImpl,\n dependencies: [EnsureFolderIsEmpty]\n }\n);\n"],"names":["GenericFolderBeforeDeleteHandlerImpl","ensureFolderIsEmpty","event","folder","result","WebinyError","GenericFolderBeforeDeleteHandler","FolderBeforeDeleteEventHandler","EnsureFolderIsEmpty"],"mappings":";;;AAKA,MAAMA;IACF,YAAoBC,mBAAkD,CAAE;aAApDA,mBAAmB,GAAnBA;IAAqD;IAEzE,MAAM,OAAOC,KAA8B,EAAiB;QACxD,MAAM,EAAEC,MAAM,EAAE,GAAGD,MAAM,OAAO;QAEhC,MAAME,SAAS,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CACjDD,OAAO,IAAI,EACXA,OAAO,EAAE,EAGT,IAAM;QAGV,IAAIC,OAAO,MAAM,IACb,MAAMC,YAAY,IAAI,CAACD,OAAO,KAAK,EAAE;YACjC,SAAS;YACT,MAAM;QACV;IAER;AACJ;AAEO,MAAME,mCAAmCC,+BAA+B,oBAAoB,CAC/F;IACI,gBAAgBP;IAChB,cAAc;QAACQ;KAAoB;AACvC"}
@@ -1,17 +1,11 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { GenericFolderBeforeDeleteHandler } from "./GenericFolderBeforeDeleteHandler.js";
3
-
4
- /**
5
- * This feature checks whether a folder is allowed to be deleted.
6
- * This generic check simply checks if there are child folders within the given folder.
7
- * Actual content cannot be checked, as folders do not have information about their records.
8
- * Individual apps (like File Manager, Headless CMS, etc.) need to implement their own event handlers.
9
- */
10
- export const EnsureFolderIsEmptyOnDeleteFeature = createFeature({
11
- name: "EnsureFolderIsEmptyOnDelete",
12
- register(container) {
13
- container.register(GenericFolderBeforeDeleteHandler);
14
- }
3
+ const EnsureFolderIsEmptyOnDeleteFeature = createFeature({
4
+ name: "EnsureFolderIsEmptyOnDelete",
5
+ register (container) {
6
+ container.register(GenericFolderBeforeDeleteHandler);
7
+ }
15
8
  });
9
+ export { EnsureFolderIsEmptyOnDeleteFeature };
16
10
 
17
11
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","GenericFolderBeforeDeleteHandler","EnsureFolderIsEmptyOnDeleteFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { GenericFolderBeforeDeleteHandler } from \"./GenericFolderBeforeDeleteHandler.js\";\n\n/**\n * This feature checks whether a folder is allowed to be deleted.\n * This generic check simply checks if there are child folders within the given folder.\n * Actual content cannot be checked, as folders do not have information about their records.\n * Individual apps (like File Manager, Headless CMS, etc.) need to implement their own event handlers.\n */\nexport const EnsureFolderIsEmptyOnDeleteFeature = createFeature({\n name: \"EnsureFolderIsEmptyOnDelete\",\n register(container) {\n container.register(GenericFolderBeforeDeleteHandler);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,gCAAgC;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,kCAAkC,GAAGF,aAAa,CAAC;EAC5DG,IAAI,EAAE,6BAA6B;EACnCC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,gCAAgC,CAAC;EACxD;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/folder/EnsureFolderIsEmptyOnDelete/feature.js","sources":["../../../../src/features/folder/EnsureFolderIsEmptyOnDelete/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { GenericFolderBeforeDeleteHandler } from \"./GenericFolderBeforeDeleteHandler.js\";\n\n/**\n * This feature checks whether a folder is allowed to be deleted.\n * This generic check simply checks if there are child folders within the given folder.\n * Actual content cannot be checked, as folders do not have information about their records.\n * Individual apps (like File Manager, Headless CMS, etc.) need to implement their own event handlers.\n */\nexport const EnsureFolderIsEmptyOnDeleteFeature = createFeature({\n name: \"EnsureFolderIsEmptyOnDelete\",\n register(container) {\n container.register(GenericFolderBeforeDeleteHandler);\n }\n});\n"],"names":["EnsureFolderIsEmptyOnDeleteFeature","createFeature","container","GenericFolderBeforeDeleteHandler"],"mappings":";;AASO,MAAMA,qCAAqCC,cAAc;IAC5D,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
@@ -1,3 +1 @@
1
1
  export { EnsureFolderIsEmptyOnDeleteFeature } from "./feature.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -4,53 +4,45 @@ import { EnsureFolderIsEmpty } from "../EnsureFolderIsEmpty/abstractions.js";
4
4
  import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
5
5
  import { ListEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries/abstractions.js";
6
6
  class ModelFolderBeforeDeleteHandlerImpl {
7
- constructor(ensureFolderIsEmpty, getModel, listEntries) {
8
- this.ensureFolderIsEmpty = ensureFolderIsEmpty;
9
- this.getModel = getModel;
10
- this.listEntries = listEntries;
11
- }
12
- async handle(event) {
13
- const {
14
- folder
15
- } = event.payload;
16
- const {
17
- id,
18
- type
19
- } = folder;
20
- const modelId = type.split(":")[1];
21
- if (!modelId) {
22
- return;
7
+ constructor(ensureFolderIsEmpty, getModel, listEntries){
8
+ this.ensureFolderIsEmpty = ensureFolderIsEmpty;
9
+ this.getModel = getModel;
10
+ this.listEntries = listEntries;
23
11
  }
24
- const modelResult = await this.getModel.execute(modelId);
25
- if (modelResult.isFail()) {
26
- return;
12
+ async handle(event) {
13
+ const { folder } = event.payload;
14
+ const { id, type } = folder;
15
+ const modelId = type.split(":")[1];
16
+ if (!modelId) return;
17
+ const modelResult = await this.getModel.execute(modelId);
18
+ if (modelResult.isFail()) return;
19
+ const result = await this.ensureFolderIsEmpty.execute(type, id, async ()=>{
20
+ const result = await this.listEntries.execute(modelResult.value, {
21
+ where: {
22
+ latest: true,
23
+ wbyAco_location: {
24
+ folderId: id
25
+ }
26
+ },
27
+ limit: 1
28
+ });
29
+ const { entries } = result.value;
30
+ return entries.length > 0;
31
+ });
32
+ if (result.isFail()) throw WebinyError.from(result.error, {
33
+ message: "Error while ensuring HCMS folder is empty before delete.",
34
+ code: "ACO_BEFORE_FOLDER_DELETE_HCMS_HANDLER"
35
+ });
27
36
  }
28
- const result = await this.ensureFolderIsEmpty.execute(type, id, async () => {
29
- const result = await this.listEntries.execute(modelResult.value, {
30
- where: {
31
- latest: true,
32
- wbyAco_location: {
33
- folderId: id
34
- }
35
- },
36
- limit: 1
37
- });
38
- const {
39
- entries
40
- } = result.value;
41
- return entries.length > 0;
42
- });
43
- if (result.isFail()) {
44
- throw WebinyError.from(result.error, {
45
- message: "Error while ensuring HCMS folder is empty before delete.",
46
- code: "ACO_BEFORE_FOLDER_DELETE_HCMS_HANDLER"
47
- });
48
- }
49
- }
50
37
  }
51
- export const ModelFolderBeforeDeleteHandler = FolderBeforeDeleteEventHandler.createImplementation({
52
- implementation: ModelFolderBeforeDeleteHandlerImpl,
53
- dependencies: [EnsureFolderIsEmpty, GetModelUseCase, ListEntriesUseCase]
38
+ const ModelFolderBeforeDeleteHandler = FolderBeforeDeleteEventHandler.createImplementation({
39
+ implementation: ModelFolderBeforeDeleteHandlerImpl,
40
+ dependencies: [
41
+ EnsureFolderIsEmpty,
42
+ GetModelUseCase,
43
+ ListEntriesUseCase
44
+ ]
54
45
  });
46
+ export { ModelFolderBeforeDeleteHandler };
55
47
 
56
48
  //# sourceMappingURL=ModelFolderBeforeDeleteHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["WebinyError","FolderBeforeDeleteEventHandler","EnsureFolderIsEmpty","GetModelUseCase","ListEntriesUseCase","ModelFolderBeforeDeleteHandlerImpl","constructor","ensureFolderIsEmpty","getModel","listEntries","handle","event","folder","payload","id","type","modelId","split","modelResult","execute","isFail","result","value","where","latest","wbyAco_location","folderId","limit","entries","length","from","error","message","code","ModelFolderBeforeDeleteHandler","createImplementation","implementation","dependencies"],"sources":["ModelFolderBeforeDeleteHandler.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { FolderBeforeDeleteEventHandler } from \"~/features/folder/DeleteFolder/abstractions.js\";\nimport type { FolderBeforeDeleteEvent } from \"~/features/folder/DeleteFolder/events.js\";\nimport { EnsureFolderIsEmpty } from \"~/features/folder/EnsureFolderIsEmpty/abstractions.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { ListEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries/abstractions.js\";\n\nclass ModelFolderBeforeDeleteHandlerImpl implements FolderBeforeDeleteEventHandler.Interface {\n constructor(\n private ensureFolderIsEmpty: EnsureFolderIsEmpty.Interface,\n private getModel: GetModelUseCase.Interface,\n private listEntries: ListEntriesUseCase.Interface\n ) {}\n\n async handle(event: FolderBeforeDeleteEvent): Promise<void> {\n const { folder } = event.payload;\n\n const { id, type } = folder;\n\n const modelId = type.split(\":\")[1];\n if (!modelId) {\n return;\n }\n\n const modelResult = await this.getModel.execute(modelId);\n if (modelResult.isFail()) {\n return;\n }\n\n const result = await this.ensureFolderIsEmpty.execute(type, id, async () => {\n const result = await this.listEntries.execute(modelResult.value, {\n where: {\n latest: true,\n wbyAco_location: {\n folderId: id\n }\n },\n limit: 1\n });\n\n const { entries } = result.value;\n\n return entries.length > 0;\n });\n\n if (result.isFail()) {\n throw WebinyError.from(result.error, {\n message: \"Error while ensuring HCMS folder is empty before delete.\",\n code: \"ACO_BEFORE_FOLDER_DELETE_HCMS_HANDLER\"\n });\n }\n }\n}\n\nexport const ModelFolderBeforeDeleteHandler = FolderBeforeDeleteEventHandler.createImplementation({\n implementation: ModelFolderBeforeDeleteHandlerImpl,\n dependencies: [EnsureFolderIsEmpty, GetModelUseCase, ListEntriesUseCase]\n});\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,eAAe;AAC3C,SAASC,8BAA8B;AAEvC,SAASC,mBAAmB;AAC5B,SAASC,eAAe,QAAQ,kEAAkE;AAClG,SAASC,kBAAkB,QAAQ,4EAA4E;AAE/G,MAAMC,kCAAkC,CAAqD;EACzFC,WAAWA,CACCC,mBAAkD,EAClDC,QAAmC,EACnCC,WAAyC,EACnD;IAAA,KAHUF,mBAAkD,GAAlDA,mBAAkD;IAAA,KAClDC,QAAmC,GAAnCA,QAAmC;IAAA,KACnCC,WAAyC,GAAzCA,WAAyC;EAClD;EAEH,MAAMC,MAAMA,CAACC,KAA8B,EAAiB;IACxD,MAAM;MAAEC;IAAO,CAAC,GAAGD,KAAK,CAACE,OAAO;IAEhC,MAAM;MAAEC,EAAE;MAAEC;IAAK,CAAC,GAAGH,MAAM;IAE3B,MAAMI,OAAO,GAAGD,IAAI,CAACE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,CAACD,OAAO,EAAE;MACV;IACJ;IAEA,MAAME,WAAW,GAAG,MAAM,IAAI,CAACV,QAAQ,CAACW,OAAO,CAACH,OAAO,CAAC;IACxD,IAAIE,WAAW,CAACE,MAAM,CAAC,CAAC,EAAE;MACtB;IACJ;IAEA,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACd,mBAAmB,CAACY,OAAO,CAACJ,IAAI,EAAED,EAAE,EAAE,YAAY;MACxE,MAAMO,MAAM,GAAG,MAAM,IAAI,CAACZ,WAAW,CAACU,OAAO,CAACD,WAAW,CAACI,KAAK,EAAE;QAC7DC,KAAK,EAAE;UACHC,MAAM,EAAE,IAAI;UACZC,eAAe,EAAE;YACbC,QAAQ,EAAEZ;UACd;QACJ,CAAC;QACDa,KAAK,EAAE;MACX,CAAC,CAAC;MAEF,MAAM;QAAEC;MAAQ,CAAC,GAAGP,MAAM,CAACC,KAAK;MAEhC,OAAOM,OAAO,CAACC,MAAM,GAAG,CAAC;IAC7B,CAAC,CAAC;IAEF,IAAIR,MAAM,CAACD,MAAM,CAAC,CAAC,EAAE;MACjB,MAAMpB,WAAW,CAAC8B,IAAI,CAACT,MAAM,CAACU,KAAK,EAAE;QACjCC,OAAO,EAAE,0DAA0D;QACnEC,IAAI,EAAE;MACV,CAAC,CAAC;IACN;EACJ;AACJ;AAEA,OAAO,MAAMC,8BAA8B,GAAGjC,8BAA8B,CAACkC,oBAAoB,CAAC;EAC9FC,cAAc,EAAE/B,kCAAkC;EAClDgC,YAAY,EAAE,CAACnC,mBAAmB,EAAEC,eAAe,EAAEC,kBAAkB;AAC3E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js","sources":["../../../../src/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { FolderBeforeDeleteEventHandler } from \"~/features/folder/DeleteFolder/abstractions.js\";\nimport type { FolderBeforeDeleteEvent } from \"~/features/folder/DeleteFolder/events.js\";\nimport { EnsureFolderIsEmpty } from \"~/features/folder/EnsureFolderIsEmpty/abstractions.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { ListEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries/abstractions.js\";\n\nclass ModelFolderBeforeDeleteHandlerImpl implements FolderBeforeDeleteEventHandler.Interface {\n constructor(\n private ensureFolderIsEmpty: EnsureFolderIsEmpty.Interface,\n private getModel: GetModelUseCase.Interface,\n private listEntries: ListEntriesUseCase.Interface\n ) {}\n\n async handle(event: FolderBeforeDeleteEvent): Promise<void> {\n const { folder } = event.payload;\n\n const { id, type } = folder;\n\n const modelId = type.split(\":\")[1];\n if (!modelId) {\n return;\n }\n\n const modelResult = await this.getModel.execute(modelId);\n if (modelResult.isFail()) {\n return;\n }\n\n const result = await this.ensureFolderIsEmpty.execute(type, id, async () => {\n const result = await this.listEntries.execute(modelResult.value, {\n where: {\n latest: true,\n wbyAco_location: {\n folderId: id\n }\n },\n limit: 1\n });\n\n const { entries } = result.value;\n\n return entries.length > 0;\n });\n\n if (result.isFail()) {\n throw WebinyError.from(result.error, {\n message: \"Error while ensuring HCMS folder is empty before delete.\",\n code: \"ACO_BEFORE_FOLDER_DELETE_HCMS_HANDLER\"\n });\n }\n }\n}\n\nexport const ModelFolderBeforeDeleteHandler = FolderBeforeDeleteEventHandler.createImplementation({\n implementation: ModelFolderBeforeDeleteHandlerImpl,\n dependencies: [EnsureFolderIsEmpty, GetModelUseCase, ListEntriesUseCase]\n});\n"],"names":["ModelFolderBeforeDeleteHandlerImpl","ensureFolderIsEmpty","getModel","listEntries","event","folder","id","type","modelId","modelResult","result","entries","WebinyError","ModelFolderBeforeDeleteHandler","FolderBeforeDeleteEventHandler","EnsureFolderIsEmpty","GetModelUseCase","ListEntriesUseCase"],"mappings":";;;;;AAOA,MAAMA;IACF,YACYC,mBAAkD,EAClDC,QAAmC,EACnCC,WAAyC,CACnD;aAHUF,mBAAmB,GAAnBA;aACAC,QAAQ,GAARA;aACAC,WAAW,GAAXA;IACT;IAEH,MAAM,OAAOC,KAA8B,EAAiB;QACxD,MAAM,EAAEC,MAAM,EAAE,GAAGD,MAAM,OAAO;QAEhC,MAAM,EAAEE,EAAE,EAAEC,IAAI,EAAE,GAAGF;QAErB,MAAMG,UAAUD,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE;QAClC,IAAI,CAACC,SACD;QAGJ,MAAMC,cAAc,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAACD;QAChD,IAAIC,YAAY,MAAM,IAClB;QAGJ,MAAMC,SAAS,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAACH,MAAMD,IAAI;YAC5D,MAAMI,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAACD,YAAY,KAAK,EAAE;gBAC7D,OAAO;oBACH,QAAQ;oBACR,iBAAiB;wBACb,UAAUH;oBACd;gBACJ;gBACA,OAAO;YACX;YAEA,MAAM,EAAEK,OAAO,EAAE,GAAGD,OAAO,KAAK;YAEhC,OAAOC,QAAQ,MAAM,GAAG;QAC5B;QAEA,IAAID,OAAO,MAAM,IACb,MAAME,YAAY,IAAI,CAACF,OAAO,KAAK,EAAE;YACjC,SAAS;YACT,MAAM;QACV;IAER;AACJ;AAEO,MAAMG,iCAAiCC,+BAA+B,oBAAoB,CAAC;IAC9F,gBAAgBd;IAChB,cAAc;QAACe;QAAqBC;QAAiBC;KAAmB;AAC5E"}
@@ -1,10 +1,11 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { ModelFolderBeforeDeleteHandler } from "./ModelFolderBeforeDeleteHandler.js";
3
- export const EnsureHcmsFolderIsEmptyOnDeleteFeature = createFeature({
4
- name: "EnsureHcmsFolderIsEmptyOnDelete",
5
- register(container) {
6
- container.register(ModelFolderBeforeDeleteHandler);
7
- }
3
+ const EnsureHcmsFolderIsEmptyOnDeleteFeature = createFeature({
4
+ name: "EnsureHcmsFolderIsEmptyOnDelete",
5
+ register (container) {
6
+ container.register(ModelFolderBeforeDeleteHandler);
7
+ }
8
8
  });
9
+ export { EnsureHcmsFolderIsEmptyOnDeleteFeature };
9
10
 
10
11
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","ModelFolderBeforeDeleteHandler","EnsureHcmsFolderIsEmptyOnDeleteFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ModelFolderBeforeDeleteHandler } from \"./ModelFolderBeforeDeleteHandler.js\";\n\nexport const EnsureHcmsFolderIsEmptyOnDeleteFeature = createFeature({\n name: \"EnsureHcmsFolderIsEmptyOnDelete\",\n register(container) {\n container.register(ModelFolderBeforeDeleteHandler);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,8BAA8B;AAEvC,OAAO,MAAMC,sCAAsC,GAAGF,aAAa,CAAC;EAChEG,IAAI,EAAE,iCAAiC;EACvCC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,8BAA8B,CAAC;EACtD;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/folder/EnsureHcmsFolderIsEmptyOnDelete/feature.js","sources":["../../../../src/features/folder/EnsureHcmsFolderIsEmptyOnDelete/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ModelFolderBeforeDeleteHandler } from \"./ModelFolderBeforeDeleteHandler.js\";\n\nexport const EnsureHcmsFolderIsEmptyOnDeleteFeature = createFeature({\n name: \"EnsureHcmsFolderIsEmptyOnDelete\",\n register(container) {\n container.register(ModelFolderBeforeDeleteHandler);\n }\n});\n"],"names":["EnsureHcmsFolderIsEmptyOnDeleteFeature","createFeature","container","ModelFolderBeforeDeleteHandler"],"mappings":";;AAGO,MAAMA,yCAAyCC,cAAc;IAChE,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
@@ -1,3 +1 @@
1
1
  export { EnsureHcmsFolderIsEmptyOnDeleteFeature } from "./feature.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -1,88 +1,58 @@
1
1
  import { Result } from "@webiny/feature/api";
2
- import { GetAncestorsRepository as RepositoryAbstraction } from "./abstractions.js";
2
+ import { GetAncestorsRepository } from "./abstractions.js";
3
3
  import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries";
4
4
  import { FolderModel } from "../../../domain/folder/abstractions.js";
5
5
  import { EntryToFolderMapper } from "../shared/EntryToFolderMapper.js";
6
6
  import { FolderPersistenceError } from "../../../domain/folder/errors.js";
7
7
  import { ROOT_FOLDER } from "../../../constants.js";
8
8
  class GetAncestorsRepositoryImpl {
9
- constructor(listLatestEntries, folderModel) {
10
- this.listLatestEntries = listLatestEntries;
11
- this.folderModel = folderModel;
12
- }
13
- async execute(params) {
14
- const {
15
- folder
16
- } = params;
17
-
18
- // No folder found: return an empty array
19
- if (!folder) {
20
- return Result.ok([]);
21
- }
22
-
23
- // The folder has no parent (it's at root level): return an array with the folder
24
- if (!folder.parentId) {
25
- return Result.ok([folder]);
9
+ constructor(listLatestEntries, folderModel){
10
+ this.listLatestEntries = listLatestEntries;
11
+ this.folderModel = folderModel;
26
12
  }
27
-
28
- // Construct paths for all ancestors of the folder
29
- const parts = folder.path.split("/").slice(1);
30
- const paths = parts.map((_, index) => {
31
- return [ROOT_FOLDER, ...parts.slice(0, index + 1)].join("/");
32
- });
33
-
34
- // Retrieve all folders that match the specified type and any of the constructed paths
35
- const result = await this.listLatestEntries.execute(this.folderModel, {
36
- where: {
37
- values: {
38
- type: folder.type,
39
- path_in: paths
40
- }
41
- }
42
- });
43
- if (result.isFail()) {
44
- return Result.fail(new FolderPersistenceError(result.error));
13
+ async execute(params) {
14
+ const { folder } = params;
15
+ if (!folder) return Result.ok([]);
16
+ if (!folder.parentId) return Result.ok([
17
+ folder
18
+ ]);
19
+ const parts = folder.path.split("/").slice(1);
20
+ const paths = parts.map((_, index)=>[
21
+ ROOT_FOLDER,
22
+ ...parts.slice(0, index + 1)
23
+ ].join("/"));
24
+ const result = await this.listLatestEntries.execute(this.folderModel, {
25
+ where: {
26
+ values: {
27
+ type: folder.type,
28
+ path_in: paths
29
+ }
30
+ }
31
+ });
32
+ if (result.isFail()) return Result.fail(new FolderPersistenceError(result.error));
33
+ const { entries } = result.value;
34
+ const folders = entries.map((entry)=>EntryToFolderMapper.toFolder(entry));
35
+ const folderMap = new Map();
36
+ folders.forEach((f)=>folderMap.set(f.id, f));
37
+ const findParents = (next, current)=>{
38
+ if (!current) return next;
39
+ next.push(current);
40
+ if (!current.parentId) return next;
41
+ const parent = folderMap.get(current.parentId);
42
+ if (!parent) return next;
43
+ return findParents(next, parent);
44
+ };
45
+ const ancestors = findParents([], folder);
46
+ return Result.ok(ancestors);
45
47
  }
46
- const {
47
- entries
48
- } = result.value;
49
- const folders = entries.map(entry => EntryToFolderMapper.toFolder(entry));
50
-
51
- // Create a Map with folders, using folder.id as key
52
- const folderMap = new Map();
53
- folders.forEach(f => folderMap.set(f.id, f));
54
- const findParents = (next, current) => {
55
- // No folder found: return the result
56
- if (!current) {
57
- return next;
58
- }
59
-
60
- // Push the current folder into the accumulator array
61
- next.push(current);
62
-
63
- // No parentId found: return the result
64
- if (!current.parentId) {
65
- return next;
66
- }
67
- const parent = folderMap.get(current.parentId);
68
-
69
- // No parent found: return the result
70
- if (!parent) {
71
- return next;
72
- }
73
-
74
- // Go ahead and find parent for the current parent
75
- return findParents(next, parent);
76
- };
77
-
78
- // Recursively find parents for a given folder id
79
- const ancestors = findParents([], folder);
80
- return Result.ok(ancestors);
81
- }
82
48
  }
83
- export const GetAncestorsRepository = RepositoryAbstraction.createImplementation({
84
- implementation: GetAncestorsRepositoryImpl,
85
- dependencies: [ListLatestEntriesUseCase, FolderModel]
49
+ const GetAncestorsRepository_GetAncestorsRepository = GetAncestorsRepository.createImplementation({
50
+ implementation: GetAncestorsRepositoryImpl,
51
+ dependencies: [
52
+ ListLatestEntriesUseCase,
53
+ FolderModel
54
+ ]
86
55
  });
56
+ export { GetAncestorsRepository_GetAncestorsRepository as GetAncestorsRepository };
87
57
 
88
58
  //# sourceMappingURL=GetAncestorsRepository.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Result","GetAncestorsRepository","RepositoryAbstraction","ListLatestEntriesUseCase","FolderModel","EntryToFolderMapper","FolderPersistenceError","ROOT_FOLDER","GetAncestorsRepositoryImpl","constructor","listLatestEntries","folderModel","execute","params","folder","ok","parentId","parts","path","split","slice","paths","map","_","index","join","result","where","values","type","path_in","isFail","fail","error","entries","value","folders","entry","toFolder","folderMap","Map","forEach","f","set","id","findParents","next","current","push","parent","get","ancestors","createImplementation","implementation","dependencies"],"sources":["GetAncestorsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n type GetAncestorsParams,\n GetAncestorsRepository as RepositoryAbstraction,\n type IGetAncestorsRepository\n} from \"./abstractions.js\";\nimport { ListLatestEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries\";\nimport { FolderModel } from \"~/domain/folder/abstractions.js\";\nimport type { CmsEntryFolder, Folder } from \"~/folder/folder.types.js\";\nimport { EntryToFolderMapper } from \"../shared/EntryToFolderMapper.js\";\nimport { FolderPersistenceError } from \"~/domain/folder/errors.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\n\nclass GetAncestorsRepositoryImpl implements IGetAncestorsRepository {\n constructor(\n private listLatestEntries: ListLatestEntriesUseCase.Interface,\n private folderModel: FolderModel.Interface\n ) {}\n\n async execute(\n params: GetAncestorsParams\n ): Promise<Result<Folder[], RepositoryAbstraction.Error>> {\n const { folder } = params;\n\n // No folder found: return an empty array\n if (!folder) {\n return Result.ok([]);\n }\n\n // The folder has no parent (it's at root level): return an array with the folder\n if (!folder.parentId) {\n return Result.ok([folder]);\n }\n\n // Construct paths for all ancestors of the folder\n const parts = folder.path.split(\"/\").slice(1);\n const paths = parts.map((_, index) => {\n return [ROOT_FOLDER, ...parts.slice(0, index + 1)].join(\"/\");\n });\n\n // Retrieve all folders that match the specified type and any of the constructed paths\n const result = await this.listLatestEntries.execute<CmsEntryFolder>(this.folderModel, {\n where: {\n values: {\n type: folder.type,\n path_in: paths\n }\n }\n });\n\n if (result.isFail()) {\n return Result.fail(new FolderPersistenceError(result.error));\n }\n\n const { entries } = result.value;\n const folders = entries.map(entry => EntryToFolderMapper.toFolder(entry));\n\n // Create a Map with folders, using folder.id as key\n const folderMap = new Map<string, Folder>();\n folders.forEach(f => folderMap.set(f.id, f));\n\n const findParents = (next: Folder[], current: Folder): Folder[] => {\n // No folder found: return the result\n if (!current) {\n return next;\n }\n\n // Push the current folder into the accumulator array\n next.push(current);\n\n // No parentId found: return the result\n if (!current.parentId) {\n return next;\n }\n\n const parent = folderMap.get(current.parentId);\n\n // No parent found: return the result\n if (!parent) {\n return next;\n }\n\n // Go ahead and find parent for the current parent\n return findParents(next, parent);\n };\n\n // Recursively find parents for a given folder id\n const ancestors = findParents([], folder);\n return Result.ok(ancestors);\n }\n}\n\nexport const GetAncestorsRepository = RepositoryAbstraction.createImplementation({\n implementation: GetAncestorsRepositoryImpl,\n dependencies: [ListLatestEntriesUseCase, FolderModel]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAEIC,sBAAsB,IAAIC,qBAAqB;AAGnD,SAASC,wBAAwB,QAAQ,4DAA4D;AACrG,SAASC,WAAW;AAEpB,SAASC,mBAAmB;AAC5B,SAASC,sBAAsB;AAC/B,SAASC,WAAW;AAEpB,MAAMC,0BAA0B,CAAoC;EAChEC,WAAWA,CACCC,iBAAqD,EACrDC,WAAkC,EAC5C;IAAA,KAFUD,iBAAqD,GAArDA,iBAAqD;IAAA,KACrDC,WAAkC,GAAlCA,WAAkC;EAC3C;EAEH,MAAMC,OAAOA,CACTC,MAA0B,EAC4B;IACtD,MAAM;MAAEC;IAAO,CAAC,GAAGD,MAAM;;IAEzB;IACA,IAAI,CAACC,MAAM,EAAE;MACT,OAAOd,MAAM,CAACe,EAAE,CAAC,EAAE,CAAC;IACxB;;IAEA;IACA,IAAI,CAACD,MAAM,CAACE,QAAQ,EAAE;MAClB,OAAOhB,MAAM,CAACe,EAAE,CAAC,CAACD,MAAM,CAAC,CAAC;IAC9B;;IAEA;IACA,MAAMG,KAAK,GAAGH,MAAM,CAACI,IAAI,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC;IAC7C,MAAMC,KAAK,GAAGJ,KAAK,CAACK,GAAG,CAAC,CAACC,CAAC,EAAEC,KAAK,KAAK;MAClC,OAAO,CAACjB,WAAW,EAAE,GAAGU,KAAK,CAACG,KAAK,CAAC,CAAC,EAAEI,KAAK,GAAG,CAAC,CAAC,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC;IAChE,CAAC,CAAC;;IAEF;IACA,MAAMC,MAAM,GAAG,MAAM,IAAI,CAAChB,iBAAiB,CAACE,OAAO,CAAiB,IAAI,CAACD,WAAW,EAAE;MAClFgB,KAAK,EAAE;QACHC,MAAM,EAAE;UACJC,IAAI,EAAEf,MAAM,CAACe,IAAI;UACjBC,OAAO,EAAET;QACb;MACJ;IACJ,CAAC,CAAC;IAEF,IAAIK,MAAM,CAACK,MAAM,CAAC,CAAC,EAAE;MACjB,OAAO/B,MAAM,CAACgC,IAAI,CAAC,IAAI1B,sBAAsB,CAACoB,MAAM,CAACO,KAAK,CAAC,CAAC;IAChE;IAEA,MAAM;MAAEC;IAAQ,CAAC,GAAGR,MAAM,CAACS,KAAK;IAChC,MAAMC,OAAO,GAAGF,OAAO,CAACZ,GAAG,CAACe,KAAK,IAAIhC,mBAAmB,CAACiC,QAAQ,CAACD,KAAK,CAAC,CAAC;;IAEzE;IACA,MAAME,SAAS,GAAG,IAAIC,GAAG,CAAiB,CAAC;IAC3CJ,OAAO,CAACK,OAAO,CAACC,CAAC,IAAIH,SAAS,CAACI,GAAG,CAACD,CAAC,CAACE,EAAE,EAAEF,CAAC,CAAC,CAAC;IAE5C,MAAMG,WAAW,GAAGA,CAACC,IAAc,EAAEC,OAAe,KAAe;MAC/D;MACA,IAAI,CAACA,OAAO,EAAE;QACV,OAAOD,IAAI;MACf;;MAEA;MACAA,IAAI,CAACE,IAAI,CAACD,OAAO,CAAC;;MAElB;MACA,IAAI,CAACA,OAAO,CAAC/B,QAAQ,EAAE;QACnB,OAAO8B,IAAI;MACf;MAEA,MAAMG,MAAM,GAAGV,SAAS,CAACW,GAAG,CAACH,OAAO,CAAC/B,QAAQ,CAAC;;MAE9C;MACA,IAAI,CAACiC,MAAM,EAAE;QACT,OAAOH,IAAI;MACf;;MAEA;MACA,OAAOD,WAAW,CAACC,IAAI,EAAEG,MAAM,CAAC;IACpC,CAAC;;IAED;IACA,MAAME,SAAS,GAAGN,WAAW,CAAC,EAAE,EAAE/B,MAAM,CAAC;IACzC,OAAOd,MAAM,CAACe,EAAE,CAACoC,SAAS,CAAC;EAC/B;AACJ;AAEA,OAAO,MAAMlD,sBAAsB,GAAGC,qBAAqB,CAACkD,oBAAoB,CAAC;EAC7EC,cAAc,EAAE7C,0BAA0B;EAC1C8C,YAAY,EAAE,CAACnD,wBAAwB,EAAEC,WAAW;AACxD,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/folder/GetAncestors/GetAncestorsRepository.js","sources":["../../../../src/features/folder/GetAncestors/GetAncestorsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n type GetAncestorsParams,\n GetAncestorsRepository as RepositoryAbstraction,\n type IGetAncestorsRepository\n} from \"./abstractions.js\";\nimport { ListLatestEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries\";\nimport { FolderModel } from \"~/domain/folder/abstractions.js\";\nimport type { CmsEntryFolder, Folder } from \"~/folder/folder.types.js\";\nimport { EntryToFolderMapper } from \"../shared/EntryToFolderMapper.js\";\nimport { FolderPersistenceError } from \"~/domain/folder/errors.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\n\nclass GetAncestorsRepositoryImpl implements IGetAncestorsRepository {\n constructor(\n private listLatestEntries: ListLatestEntriesUseCase.Interface,\n private folderModel: FolderModel.Interface\n ) {}\n\n async execute(\n params: GetAncestorsParams\n ): Promise<Result<Folder[], RepositoryAbstraction.Error>> {\n const { folder } = params;\n\n // No folder found: return an empty array\n if (!folder) {\n return Result.ok([]);\n }\n\n // The folder has no parent (it's at root level): return an array with the folder\n if (!folder.parentId) {\n return Result.ok([folder]);\n }\n\n // Construct paths for all ancestors of the folder\n const parts = folder.path.split(\"/\").slice(1);\n const paths = parts.map((_, index) => {\n return [ROOT_FOLDER, ...parts.slice(0, index + 1)].join(\"/\");\n });\n\n // Retrieve all folders that match the specified type and any of the constructed paths\n const result = await this.listLatestEntries.execute<CmsEntryFolder>(this.folderModel, {\n where: {\n values: {\n type: folder.type,\n path_in: paths\n }\n }\n });\n\n if (result.isFail()) {\n return Result.fail(new FolderPersistenceError(result.error));\n }\n\n const { entries } = result.value;\n const folders = entries.map(entry => EntryToFolderMapper.toFolder(entry));\n\n // Create a Map with folders, using folder.id as key\n const folderMap = new Map<string, Folder>();\n folders.forEach(f => folderMap.set(f.id, f));\n\n const findParents = (next: Folder[], current: Folder): Folder[] => {\n // No folder found: return the result\n if (!current) {\n return next;\n }\n\n // Push the current folder into the accumulator array\n next.push(current);\n\n // No parentId found: return the result\n if (!current.parentId) {\n return next;\n }\n\n const parent = folderMap.get(current.parentId);\n\n // No parent found: return the result\n if (!parent) {\n return next;\n }\n\n // Go ahead and find parent for the current parent\n return findParents(next, parent);\n };\n\n // Recursively find parents for a given folder id\n const ancestors = findParents([], folder);\n return Result.ok(ancestors);\n }\n}\n\nexport const GetAncestorsRepository = RepositoryAbstraction.createImplementation({\n implementation: GetAncestorsRepositoryImpl,\n dependencies: [ListLatestEntriesUseCase, FolderModel]\n});\n"],"names":["GetAncestorsRepositoryImpl","listLatestEntries","folderModel","params","folder","Result","parts","paths","_","index","ROOT_FOLDER","result","FolderPersistenceError","entries","folders","entry","EntryToFolderMapper","folderMap","Map","f","findParents","next","current","parent","ancestors","GetAncestorsRepository","RepositoryAbstraction","ListLatestEntriesUseCase","FolderModel"],"mappings":";;;;;;;AAaA,MAAMA;IACF,YACYC,iBAAqD,EACrDC,WAAkC,CAC5C;aAFUD,iBAAiB,GAAjBA;aACAC,WAAW,GAAXA;IACT;IAEH,MAAM,QACFC,MAA0B,EAC4B;QACtD,MAAM,EAAEC,MAAM,EAAE,GAAGD;QAGnB,IAAI,CAACC,QACD,OAAOC,OAAO,EAAE,CAAC,EAAE;QAIvB,IAAI,CAACD,OAAO,QAAQ,EAChB,OAAOC,OAAO,EAAE,CAAC;YAACD;SAAO;QAI7B,MAAME,QAAQF,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;QAC3C,MAAMG,QAAQD,MAAM,GAAG,CAAC,CAACE,GAAGC,QACjB;gBAACC;mBAAgBJ,MAAM,KAAK,CAAC,GAAGG,QAAQ;aAAG,CAAC,IAAI,CAAC;QAI5D,MAAME,SAAS,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAiB,IAAI,CAAC,WAAW,EAAE;YAClF,OAAO;gBACH,QAAQ;oBACJ,MAAMP,OAAO,IAAI;oBACjB,SAASG;gBACb;YACJ;QACJ;QAEA,IAAII,OAAO,MAAM,IACb,OAAON,OAAO,IAAI,CAAC,IAAIO,uBAAuBD,OAAO,KAAK;QAG9D,MAAM,EAAEE,OAAO,EAAE,GAAGF,OAAO,KAAK;QAChC,MAAMG,UAAUD,QAAQ,GAAG,CAACE,CAAAA,QAASC,oBAAoB,QAAQ,CAACD;QAGlE,MAAME,YAAY,IAAIC;QACtBJ,QAAQ,OAAO,CAACK,CAAAA,IAAKF,UAAU,GAAG,CAACE,EAAE,EAAE,EAAEA;QAEzC,MAAMC,cAAc,CAACC,MAAgBC;YAEjC,IAAI,CAACA,SACD,OAAOD;YAIXA,KAAK,IAAI,CAACC;YAGV,IAAI,CAACA,QAAQ,QAAQ,EACjB,OAAOD;YAGX,MAAME,SAASN,UAAU,GAAG,CAACK,QAAQ,QAAQ;YAG7C,IAAI,CAACC,QACD,OAAOF;YAIX,OAAOD,YAAYC,MAAME;QAC7B;QAGA,MAAMC,YAAYJ,YAAY,EAAE,EAAEhB;QAClC,OAAOC,OAAO,EAAE,CAACmB;IACrB;AACJ;AAEO,MAAMC,gDAAyBC,uBAAAA,oBAA0C,CAAC;IAC7E,gBAAgB1B;IAChB,cAAc;QAAC2B;QAA0BC;KAAY;AACzD"}