@webiny/api-aco 0.0.0-unstable.b14eaecf38 → 0.0.0-unstable.b6d7105cee

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 (560) hide show
  1. package/README.md +6 -28
  2. package/constants.d.ts +2 -0
  3. package/constants.js +5 -0
  4. package/constants.js.map +1 -0
  5. package/createAcoContext.d.ts +2 -2
  6. package/createAcoContext.js +111 -61
  7. package/createAcoContext.js.map +1 -1
  8. package/createAcoGraphQL.d.ts +3 -2
  9. package/createAcoGraphQL.js +55 -37
  10. package/createAcoGraphQL.js.map +1 -1
  11. package/createAcoTasks.d.ts +1 -0
  12. package/createAcoTasks.js +14 -0
  13. package/createAcoTasks.js.map +1 -0
  14. package/domain/folder/abstractions.d.ts +9 -0
  15. package/domain/folder/abstractions.js +5 -0
  16. package/domain/folder/abstractions.js.map +1 -0
  17. package/domain/folder/errors.d.ts +29 -0
  18. package/domain/folder/errors.js +51 -0
  19. package/domain/folder/errors.js.map +1 -0
  20. package/domain/folder/folder.model.d.ts +9 -0
  21. package/domain/folder/folder.model.js +58 -0
  22. package/domain/folder/folder.model.js.map +1 -0
  23. package/exports/api/aco/flp.d.ts +6 -0
  24. package/exports/api/aco/flp.js +6 -0
  25. package/exports/api/aco/folder.d.ts +11 -0
  26. package/exports/api/aco/folder.js +10 -0
  27. package/features/cms/decorators/CreateEntryRevisionFromWithFlpDecorator.d.ts +13 -0
  28. package/features/cms/decorators/CreateEntryRevisionFromWithFlpDecorator.js +39 -0
  29. package/features/cms/decorators/CreateEntryRevisionFromWithFlpDecorator.js.map +1 -0
  30. package/features/cms/decorators/CreateEntryWithFlpDecorator.d.ts +12 -0
  31. package/features/cms/decorators/CreateEntryWithFlpDecorator.js +33 -0
  32. package/features/cms/decorators/CreateEntryWithFlpDecorator.js.map +1 -0
  33. package/features/cms/decorators/DeleteEntryRevisionWithFlpDecorator.d.ts +13 -0
  34. package/features/cms/decorators/DeleteEntryRevisionWithFlpDecorator.js +39 -0
  35. package/features/cms/decorators/DeleteEntryRevisionWithFlpDecorator.js.map +1 -0
  36. package/features/cms/decorators/DeleteEntryWithFlpDecorator.d.ts +13 -0
  37. package/features/cms/decorators/DeleteEntryWithFlpDecorator.js +41 -0
  38. package/features/cms/decorators/DeleteEntryWithFlpDecorator.js.map +1 -0
  39. package/features/cms/decorators/GetEntryByIdWithFlpDecorator.d.ts +12 -0
  40. package/features/cms/decorators/GetEntryByIdWithFlpDecorator.js +36 -0
  41. package/features/cms/decorators/GetEntryByIdWithFlpDecorator.js.map +1 -0
  42. package/features/cms/decorators/GetEntryWithFlpDecorator.d.ts +12 -0
  43. package/features/cms/decorators/GetEntryWithFlpDecorator.js +36 -0
  44. package/features/cms/decorators/GetEntryWithFlpDecorator.js.map +1 -0
  45. package/features/cms/decorators/GetLatestEntriesByIdsWithFlpDecorator.d.ts +13 -0
  46. package/features/cms/decorators/GetLatestEntriesByIdsWithFlpDecorator.js +41 -0
  47. package/features/cms/decorators/GetLatestEntriesByIdsWithFlpDecorator.js.map +1 -0
  48. package/features/cms/decorators/GetPublishedEntriesByIdsWithFlpDecorator.d.ts +13 -0
  49. package/features/cms/decorators/GetPublishedEntriesByIdsWithFlpDecorator.js +41 -0
  50. package/features/cms/decorators/GetPublishedEntriesByIdsWithFlpDecorator.js.map +1 -0
  51. package/features/cms/decorators/ListDeletedEntriesWithFlpDecorator.d.ts +11 -0
  52. package/features/cms/decorators/ListDeletedEntriesWithFlpDecorator.js +36 -0
  53. package/features/cms/decorators/ListDeletedEntriesWithFlpDecorator.js.map +1 -0
  54. package/features/cms/decorators/ListEntriesWithFlpDecorator.d.ts +11 -0
  55. package/features/cms/decorators/ListEntriesWithFlpDecorator.js +36 -0
  56. package/features/cms/decorators/ListEntriesWithFlpDecorator.js.map +1 -0
  57. package/features/cms/decorators/ListLatestEntriesWithFlpDecorator.d.ts +11 -0
  58. package/features/cms/decorators/ListLatestEntriesWithFlpDecorator.js +36 -0
  59. package/features/cms/decorators/ListLatestEntriesWithFlpDecorator.js.map +1 -0
  60. package/features/cms/decorators/ListPublishedEntriesWithFlpDecorator.d.ts +11 -0
  61. package/features/cms/decorators/ListPublishedEntriesWithFlpDecorator.js +36 -0
  62. package/features/cms/decorators/ListPublishedEntriesWithFlpDecorator.js.map +1 -0
  63. package/features/cms/decorators/MoveEntryWithFlpDecorator.d.ts +15 -0
  64. package/features/cms/decorators/MoveEntryWithFlpDecorator.js +49 -0
  65. package/features/cms/decorators/MoveEntryWithFlpDecorator.js.map +1 -0
  66. package/features/cms/decorators/UpdateEntryWithFlpDecorator.d.ts +14 -0
  67. package/features/cms/decorators/UpdateEntryWithFlpDecorator.js +39 -0
  68. package/features/cms/decorators/UpdateEntryWithFlpDecorator.js.map +1 -0
  69. package/features/cms/feature.d.ts +4 -0
  70. package/features/cms/feature.js +37 -0
  71. package/features/cms/feature.js.map +1 -0
  72. package/features/cms/index.d.ts +1 -0
  73. package/features/cms/index.js +1 -0
  74. package/features/flp/CreateFlp/CreateFlpUseCase.d.ts +8 -0
  75. package/features/flp/CreateFlp/CreateFlpUseCase.js +34 -0
  76. package/features/flp/CreateFlp/CreateFlpUseCase.js.map +1 -0
  77. package/features/flp/CreateFlp/abstractions.d.ts +9 -0
  78. package/features/flp/CreateFlp/abstractions.js +5 -0
  79. package/features/flp/CreateFlp/abstractions.js.map +1 -0
  80. package/features/flp/CreateFlp/feature.d.ts +10 -0
  81. package/features/flp/CreateFlp/feature.js +12 -0
  82. package/features/flp/CreateFlp/feature.js.map +1 -0
  83. package/features/flp/CreateFlp/index.d.ts +2 -0
  84. package/features/flp/CreateFlp/index.js +2 -0
  85. package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.d.ts +14 -0
  86. package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.js +37 -0
  87. package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.js.map +1 -0
  88. package/features/flp/CreateFlpOnFolderCreated/feature.d.ts +4 -0
  89. package/features/flp/CreateFlpOnFolderCreated/feature.js +11 -0
  90. package/features/flp/CreateFlpOnFolderCreated/feature.js.map +1 -0
  91. package/features/flp/CreateFlpOnFolderCreated/index.d.ts +1 -0
  92. package/features/flp/CreateFlpOnFolderCreated/index.js +1 -0
  93. package/features/flp/DeleteFlp/DeleteFlpUseCase.d.ts +8 -0
  94. package/features/flp/DeleteFlp/DeleteFlpUseCase.js +22 -0
  95. package/features/flp/DeleteFlp/DeleteFlpUseCase.js.map +1 -0
  96. package/features/flp/DeleteFlp/abstractions.d.ts +9 -0
  97. package/features/flp/DeleteFlp/abstractions.js +5 -0
  98. package/features/flp/DeleteFlp/abstractions.js.map +1 -0
  99. package/features/flp/DeleteFlp/feature.d.ts +10 -0
  100. package/features/flp/DeleteFlp/feature.js +12 -0
  101. package/features/flp/DeleteFlp/feature.js.map +1 -0
  102. package/features/flp/DeleteFlp/index.d.ts +2 -0
  103. package/features/flp/DeleteFlp/index.js +2 -0
  104. package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.d.ts +14 -0
  105. package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.js +37 -0
  106. package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.js.map +1 -0
  107. package/features/flp/DeleteFlpOnFolderDeleted/feature.d.ts +4 -0
  108. package/features/flp/DeleteFlpOnFolderDeleted/feature.js +11 -0
  109. package/features/flp/DeleteFlpOnFolderDeleted/feature.js.map +1 -0
  110. package/features/flp/DeleteFlpOnFolderDeleted/index.d.ts +1 -0
  111. package/features/flp/DeleteFlpOnFolderDeleted/index.js +1 -0
  112. package/features/flp/FolderLevelPermissions/FolderLevelPermissions.d.ts +35 -0
  113. package/features/flp/FolderLevelPermissions/FolderLevelPermissions.js +112 -0
  114. package/features/flp/FolderLevelPermissions/FolderLevelPermissions.js.map +1 -0
  115. package/features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.d.ts +25 -0
  116. package/features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.js +48 -0
  117. package/features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.js.map +1 -0
  118. package/features/flp/FolderLevelPermissions/abstractions.d.ts +26 -0
  119. package/features/flp/FolderLevelPermissions/abstractions.js +5 -0
  120. package/features/flp/FolderLevelPermissions/abstractions.js.map +1 -0
  121. package/features/flp/FolderLevelPermissions/feature.d.ts +5 -0
  122. package/features/flp/FolderLevelPermissions/feature.js +11 -0
  123. package/features/flp/FolderLevelPermissions/feature.js.map +1 -0
  124. package/features/flp/FolderLevelPermissions/index.d.ts +3 -0
  125. package/features/flp/FolderLevelPermissions/index.js +3 -0
  126. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.d.ts +7 -0
  127. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.js +19 -0
  128. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.js.map +1 -0
  129. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/ICanAccessFolder.d.ts +9 -0
  130. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/ICanAccessFolder.js +0 -0
  131. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/index.d.ts +2 -0
  132. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/index.js +1 -0
  133. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.d.ts +7 -0
  134. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.js +17 -0
  135. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.js.map +1 -0
  136. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/ICanAccessFolderContent.d.ts +8 -0
  137. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/ICanAccessFolderContent.js +0 -0
  138. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/index.d.ts +2 -0
  139. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/index.js +1 -0
  140. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.d.ts +4 -0
  141. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.js +8 -0
  142. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.js.map +1 -0
  143. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/ICanCreateFolderInRoot.d.ts +3 -0
  144. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/ICanCreateFolderInRoot.js +0 -0
  145. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/index.d.ts +2 -0
  146. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/index.js +1 -0
  147. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.d.ts +5 -0
  148. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.js +8 -0
  149. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.js.map +1 -0
  150. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/ICheckNotInheritedPermissions.d.ts +4 -0
  151. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/ICheckNotInheritedPermissions.js +0 -0
  152. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/index.d.ts +2 -0
  153. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/index.js +1 -0
  154. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.d.ts +5 -0
  155. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.js +47 -0
  156. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.js.map +1 -0
  157. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.d.ts +8 -0
  158. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.js +14 -0
  159. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.js.map +1 -0
  160. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.d.ts +11 -0
  161. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.js +27 -0
  162. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.js.map +1 -0
  163. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/IGetDefaultPermissions.d.ts +4 -0
  164. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/IGetDefaultPermissions.js +0 -0
  165. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/index.d.ts +3 -0
  166. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/index.js +2 -0
  167. package/features/flp/FolderLevelPermissions/useCases/index.d.ts +5 -0
  168. package/features/flp/FolderLevelPermissions/useCases/index.js +5 -0
  169. package/features/flp/GetFlp/GetFlpUseCase.d.ts +7 -0
  170. package/features/flp/GetFlp/GetFlpUseCase.js +11 -0
  171. package/features/flp/GetFlp/GetFlpUseCase.js.map +1 -0
  172. package/features/flp/GetFlp/abstractions.d.ts +9 -0
  173. package/features/flp/GetFlp/abstractions.js +5 -0
  174. package/features/flp/GetFlp/abstractions.js.map +1 -0
  175. package/features/flp/GetFlp/feature.d.ts +4 -0
  176. package/features/flp/GetFlp/feature.js +12 -0
  177. package/features/flp/GetFlp/feature.js.map +1 -0
  178. package/features/flp/GetFlp/index.d.ts +1 -0
  179. package/features/flp/GetFlp/index.js +1 -0
  180. package/features/flp/ListFlps/ListFlpsUseCase.d.ts +7 -0
  181. package/features/flp/ListFlps/ListFlpsUseCase.js +11 -0
  182. package/features/flp/ListFlps/ListFlpsUseCase.js.map +1 -0
  183. package/features/flp/ListFlps/abstractions.d.ts +17 -0
  184. package/features/flp/ListFlps/abstractions.js +5 -0
  185. package/features/flp/ListFlps/abstractions.js.map +1 -0
  186. package/features/flp/ListFlps/feature.d.ts +4 -0
  187. package/features/flp/ListFlps/feature.js +12 -0
  188. package/features/flp/ListFlps/feature.js.map +1 -0
  189. package/features/flp/ListFlps/index.d.ts +1 -0
  190. package/features/flp/ListFlps/index.js +1 -0
  191. package/features/flp/UpdateFlp/UpdateFlpUseCase.d.ts +19 -0
  192. package/features/flp/UpdateFlp/UpdateFlpUseCase.js +152 -0
  193. package/features/flp/UpdateFlp/UpdateFlpUseCase.js.map +1 -0
  194. package/features/flp/UpdateFlp/abstractions.d.ts +15 -0
  195. package/features/flp/UpdateFlp/abstractions.js +5 -0
  196. package/features/flp/UpdateFlp/abstractions.js.map +1 -0
  197. package/features/flp/UpdateFlp/feature.d.ts +10 -0
  198. package/features/flp/UpdateFlp/feature.js +12 -0
  199. package/features/flp/UpdateFlp/feature.js.map +1 -0
  200. package/features/flp/UpdateFlp/index.d.ts +2 -0
  201. package/features/flp/UpdateFlp/index.js +2 -0
  202. package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.d.ts +14 -0
  203. package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.js +39 -0
  204. package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.js.map +1 -0
  205. package/features/flp/UpdateFlpOnFolderUpdated/feature.d.ts +4 -0
  206. package/features/flp/UpdateFlpOnFolderUpdated/feature.js +11 -0
  207. package/features/flp/UpdateFlpOnFolderUpdated/feature.js.map +1 -0
  208. package/features/flp/UpdateFlpOnFolderUpdated/index.d.ts +1 -0
  209. package/features/flp/UpdateFlpOnFolderUpdated/index.js +1 -0
  210. package/features/folder/CreateFolder/CreateFolderRepository.d.ts +21 -0
  211. package/features/folder/CreateFolder/CreateFolderRepository.js +85 -0
  212. package/features/folder/CreateFolder/CreateFolderRepository.js.map +1 -0
  213. package/features/folder/CreateFolder/CreateFolderUseCase.d.ts +12 -0
  214. package/features/folder/CreateFolder/CreateFolderUseCase.js +36 -0
  215. package/features/folder/CreateFolder/CreateFolderUseCase.js.map +1 -0
  216. package/features/folder/CreateFolder/abstractions.d.ts +59 -0
  217. package/features/folder/CreateFolder/abstractions.js +8 -0
  218. package/features/folder/CreateFolder/abstractions.js.map +1 -0
  219. package/features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.d.ts +11 -0
  220. package/features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.js +39 -0
  221. package/features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.js.map +1 -0
  222. package/features/folder/CreateFolder/events.d.ts +10 -0
  223. package/features/folder/CreateFolder/events.js +21 -0
  224. package/features/folder/CreateFolder/events.js.map +1 -0
  225. package/features/folder/CreateFolder/feature.d.ts +5 -0
  226. package/features/folder/CreateFolder/feature.js +15 -0
  227. package/features/folder/CreateFolder/feature.js.map +1 -0
  228. package/features/folder/CreateFolder/index.d.ts +2 -0
  229. package/features/folder/CreateFolder/index.js +2 -0
  230. package/features/folder/DeleteFolder/DeleteFolderRepository.d.ts +15 -0
  231. package/features/folder/DeleteFolder/DeleteFolderRepository.js +32 -0
  232. package/features/folder/DeleteFolder/DeleteFolderRepository.js.map +1 -0
  233. package/features/folder/DeleteFolder/DeleteFolderUseCase.d.ts +13 -0
  234. package/features/folder/DeleteFolder/DeleteFolderUseCase.js +47 -0
  235. package/features/folder/DeleteFolder/DeleteFolderUseCase.js.map +1 -0
  236. package/features/folder/DeleteFolder/abstractions.d.ts +59 -0
  237. package/features/folder/DeleteFolder/abstractions.js +8 -0
  238. package/features/folder/DeleteFolder/abstractions.js.map +1 -0
  239. package/features/folder/DeleteFolder/decorators/DeleteFolderWithFolderLevelPermissions.d.ts +11 -0
  240. package/features/folder/DeleteFolder/decorators/DeleteFolderWithFolderLevelPermissions.js +29 -0
  241. package/features/folder/DeleteFolder/decorators/DeleteFolderWithFolderLevelPermissions.js.map +1 -0
  242. package/features/folder/DeleteFolder/events.d.ts +10 -0
  243. package/features/folder/DeleteFolder/events.js +21 -0
  244. package/features/folder/DeleteFolder/events.js.map +1 -0
  245. package/features/folder/DeleteFolder/feature.d.ts +5 -0
  246. package/features/folder/DeleteFolder/feature.js +15 -0
  247. package/features/folder/DeleteFolder/feature.js.map +1 -0
  248. package/features/folder/DeleteFolder/index.d.ts +2 -0
  249. package/features/folder/DeleteFolder/index.js +2 -0
  250. package/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.d.ts +15 -0
  251. package/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js +59 -0
  252. package/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js.map +1 -0
  253. package/features/folder/EnsureFolderIsEmpty/abstractions.d.ts +21 -0
  254. package/features/folder/EnsureFolderIsEmpty/abstractions.js +5 -0
  255. package/features/folder/EnsureFolderIsEmpty/abstractions.js.map +1 -0
  256. package/features/folder/EnsureFolderIsEmpty/feature.d.ts +4 -0
  257. package/features/folder/EnsureFolderIsEmpty/feature.js +11 -0
  258. package/features/folder/EnsureFolderIsEmpty/feature.js.map +1 -0
  259. package/features/folder/EnsureFolderIsEmpty/index.d.ts +1 -0
  260. package/features/folder/EnsureFolderIsEmpty/index.js +1 -0
  261. package/features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.d.ts +12 -0
  262. package/features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.js +25 -0
  263. package/features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.js.map +1 -0
  264. package/features/folder/EnsureFolderIsEmptyOnDelete/feature.d.ts +10 -0
  265. package/features/folder/EnsureFolderIsEmptyOnDelete/feature.js +11 -0
  266. package/features/folder/EnsureFolderIsEmptyOnDelete/feature.js.map +1 -0
  267. package/features/folder/EnsureFolderIsEmptyOnDelete/index.d.ts +1 -0
  268. package/features/folder/EnsureFolderIsEmptyOnDelete/index.js +1 -0
  269. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.d.ts +16 -0
  270. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js +52 -0
  271. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js.map +1 -0
  272. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/feature.d.ts +4 -0
  273. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/feature.js +11 -0
  274. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/feature.js.map +1 -0
  275. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/index.d.ts +1 -0
  276. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/index.js +1 -0
  277. package/features/folder/GetAncestors/GetAncestorsRepository.d.ts +15 -0
  278. package/features/folder/GetAncestors/GetAncestorsRepository.js +58 -0
  279. package/features/folder/GetAncestors/GetAncestorsRepository.js.map +1 -0
  280. package/features/folder/GetAncestors/GetAncestorsUseCase.d.ts +10 -0
  281. package/features/folder/GetAncestors/GetAncestorsUseCase.js +20 -0
  282. package/features/folder/GetAncestors/GetAncestorsUseCase.js.map +1 -0
  283. package/features/folder/GetAncestors/abstractions.d.ts +40 -0
  284. package/features/folder/GetAncestors/abstractions.js +6 -0
  285. package/features/folder/GetAncestors/abstractions.js.map +1 -0
  286. package/features/folder/GetAncestors/feature.d.ts +5 -0
  287. package/features/folder/GetAncestors/feature.js +13 -0
  288. package/features/folder/GetAncestors/feature.js.map +1 -0
  289. package/features/folder/GetAncestors/index.d.ts +2 -0
  290. package/features/folder/GetAncestors/index.js +2 -0
  291. package/features/folder/GetFolder/GetFolderRepository.d.ts +15 -0
  292. package/features/folder/GetFolder/GetFolderRepository.js +33 -0
  293. package/features/folder/GetFolder/GetFolderRepository.js.map +1 -0
  294. package/features/folder/GetFolder/GetFolderUseCase.d.ts +10 -0
  295. package/features/folder/GetFolder/GetFolderUseCase.js +20 -0
  296. package/features/folder/GetFolder/GetFolderUseCase.js.map +1 -0
  297. package/features/folder/GetFolder/abstractions.d.ts +57 -0
  298. package/features/folder/GetFolder/abstractions.js +8 -0
  299. package/features/folder/GetFolder/abstractions.js.map +1 -0
  300. package/features/folder/GetFolder/decorators/GetFolderWithFolderLevelPermissions.d.ts +29 -0
  301. package/features/folder/GetFolder/decorators/GetFolderWithFolderLevelPermissions.js +34 -0
  302. package/features/folder/GetFolder/decorators/GetFolderWithFolderLevelPermissions.js.map +1 -0
  303. package/features/folder/GetFolder/feature.d.ts +5 -0
  304. package/features/folder/GetFolder/feature.js +15 -0
  305. package/features/folder/GetFolder/feature.js.map +1 -0
  306. package/features/folder/GetFolder/index.d.ts +2 -0
  307. package/features/folder/GetFolder/index.js +2 -0
  308. package/features/folder/GetFolderHierarchy/GetFolderHierarchyRepository.d.ts +18 -0
  309. package/features/folder/GetFolderHierarchy/GetFolderHierarchyRepository.js +84 -0
  310. package/features/folder/GetFolderHierarchy/GetFolderHierarchyRepository.js.map +1 -0
  311. package/features/folder/GetFolderHierarchy/GetFolderHierarchyUseCase.d.ts +10 -0
  312. package/features/folder/GetFolderHierarchy/GetFolderHierarchyUseCase.js +20 -0
  313. package/features/folder/GetFolderHierarchy/GetFolderHierarchyUseCase.js.map +1 -0
  314. package/features/folder/GetFolderHierarchy/abstractions.d.ts +38 -0
  315. package/features/folder/GetFolderHierarchy/abstractions.js +6 -0
  316. package/features/folder/GetFolderHierarchy/abstractions.js.map +1 -0
  317. package/features/folder/GetFolderHierarchy/decorators/GetFolderHierarchyWithFolderLevelPermissions.d.ts +16 -0
  318. package/features/folder/GetFolderHierarchy/decorators/GetFolderHierarchyWithFolderLevelPermissions.js +63 -0
  319. package/features/folder/GetFolderHierarchy/decorators/GetFolderHierarchyWithFolderLevelPermissions.js.map +1 -0
  320. package/features/folder/GetFolderHierarchy/feature.d.ts +5 -0
  321. package/features/folder/GetFolderHierarchy/feature.js +15 -0
  322. package/features/folder/GetFolderHierarchy/feature.js.map +1 -0
  323. package/features/folder/GetFolderHierarchy/index.d.ts +2 -0
  324. package/features/folder/GetFolderHierarchy/index.js +2 -0
  325. package/features/folder/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargetsUseCase.d.ts +13 -0
  326. package/features/folder/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargetsUseCase.js +75 -0
  327. package/features/folder/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargetsUseCase.js.map +1 -0
  328. package/features/folder/ListFolderLevelPermissionsTargets/abstractions.d.ts +11 -0
  329. package/features/folder/ListFolderLevelPermissionsTargets/abstractions.js +5 -0
  330. package/features/folder/ListFolderLevelPermissionsTargets/abstractions.js.map +1 -0
  331. package/features/folder/ListFolderLevelPermissionsTargets/feature.d.ts +4 -0
  332. package/features/folder/ListFolderLevelPermissionsTargets/feature.js +11 -0
  333. package/features/folder/ListFolderLevelPermissionsTargets/feature.js.map +1 -0
  334. package/features/folder/ListFolderLevelPermissionsTargets/index.d.ts +1 -0
  335. package/features/folder/ListFolderLevelPermissionsTargets/index.js +1 -0
  336. package/features/folder/ListFolders/ListFoldersRepository.d.ts +17 -0
  337. package/features/folder/ListFolders/ListFoldersRepository.js +52 -0
  338. package/features/folder/ListFolders/ListFoldersRepository.js.map +1 -0
  339. package/features/folder/ListFolders/ListFoldersUseCase.d.ts +9 -0
  340. package/features/folder/ListFolders/ListFoldersUseCase.js +20 -0
  341. package/features/folder/ListFolders/ListFoldersUseCase.js.map +1 -0
  342. package/features/folder/ListFolders/abstractions.d.ts +44 -0
  343. package/features/folder/ListFolders/abstractions.js +6 -0
  344. package/features/folder/ListFolders/abstractions.js.map +1 -0
  345. package/features/folder/ListFolders/decorators/ListFoldersWithFolderLevelPermissions.d.ts +17 -0
  346. package/features/folder/ListFolders/decorators/ListFoldersWithFolderLevelPermissions.js +65 -0
  347. package/features/folder/ListFolders/decorators/ListFoldersWithFolderLevelPermissions.js.map +1 -0
  348. package/features/folder/ListFolders/feature.d.ts +5 -0
  349. package/features/folder/ListFolders/feature.js +15 -0
  350. package/features/folder/ListFolders/feature.js.map +1 -0
  351. package/features/folder/ListFolders/index.d.ts +2 -0
  352. package/features/folder/ListFolders/index.js +2 -0
  353. package/features/folder/UpdateFolder/UpdateFolderRepository.d.ts +21 -0
  354. package/features/folder/UpdateFolder/UpdateFolderRepository.js +84 -0
  355. package/features/folder/UpdateFolder/UpdateFolderRepository.js.map +1 -0
  356. package/features/folder/UpdateFolder/UpdateFolderUseCase.d.ts +14 -0
  357. package/features/folder/UpdateFolder/UpdateFolderUseCase.js +48 -0
  358. package/features/folder/UpdateFolder/UpdateFolderUseCase.js.map +1 -0
  359. package/features/folder/UpdateFolder/abstractions.d.ts +64 -0
  360. package/features/folder/UpdateFolder/abstractions.js +8 -0
  361. package/features/folder/UpdateFolder/abstractions.js.map +1 -0
  362. package/features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.d.ts +13 -0
  363. package/features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.js +58 -0
  364. package/features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.js.map +1 -0
  365. package/features/folder/UpdateFolder/events.d.ts +10 -0
  366. package/features/folder/UpdateFolder/events.js +21 -0
  367. package/features/folder/UpdateFolder/events.js.map +1 -0
  368. package/features/folder/UpdateFolder/feature.d.ts +5 -0
  369. package/features/folder/UpdateFolder/feature.js +15 -0
  370. package/features/folder/UpdateFolder/feature.js.map +1 -0
  371. package/features/folder/UpdateFolder/index.d.ts +2 -0
  372. package/features/folder/UpdateFolder/index.js +2 -0
  373. package/features/folder/shared/EntryToFolderMapper.d.ts +5 -0
  374. package/features/folder/shared/EntryToFolderMapper.js +23 -0
  375. package/features/folder/shared/EntryToFolderMapper.js.map +1 -0
  376. package/features/folder/shared/abstractions.d.ts +10 -0
  377. package/features/folder/shared/abstractions.js +6 -0
  378. package/features/folder/shared/abstractions.js.map +1 -0
  379. package/filter/filter.crud.d.ts +3 -0
  380. package/filter/filter.crud.js +30 -0
  381. package/filter/filter.crud.js.map +1 -0
  382. package/filter/filter.gql.d.ts +3 -0
  383. package/filter/filter.gql.js +130 -0
  384. package/filter/filter.gql.js.map +1 -0
  385. package/filter/filter.model.d.ts +9 -0
  386. package/filter/filter.model.js +50 -0
  387. package/filter/filter.model.js.map +1 -0
  388. package/filter/filter.so.d.ts +11 -0
  389. package/filter/filter.so.js +84 -0
  390. package/filter/filter.so.js.map +1 -0
  391. package/filter/filter.types.d.ts +67 -0
  392. package/filter/filter.types.js +8 -0
  393. package/filter/filter.types.js.map +1 -0
  394. package/flp/flp.crud.d.ts +7 -0
  395. package/flp/flp.crud.js +74 -0
  396. package/flp/flp.crud.js.map +1 -0
  397. package/flp/flp.types.d.ts +93 -0
  398. package/flp/flp.types.js +0 -0
  399. package/flp/index.d.ts +2 -0
  400. package/flp/index.js +2 -0
  401. package/flp/tasks/createFlp.task.d.ts +18 -0
  402. package/flp/tasks/createFlp.task.js +36 -0
  403. package/flp/tasks/createFlp.task.js.map +1 -0
  404. package/flp/tasks/deleteFlp.task.d.ts +18 -0
  405. package/flp/tasks/deleteFlp.task.js +36 -0
  406. package/flp/tasks/deleteFlp.task.js.map +1 -0
  407. package/flp/tasks/index.d.ts +5 -0
  408. package/flp/tasks/index.js +20 -0
  409. package/flp/tasks/index.js.map +1 -0
  410. package/flp/tasks/syncFlp.task.d.ts +22 -0
  411. package/flp/tasks/syncFlp.task.js +112 -0
  412. package/flp/tasks/syncFlp.task.js.map +1 -0
  413. package/flp/tasks/updateFlp.task.d.ts +18 -0
  414. package/flp/tasks/updateFlp.task.js +43 -0
  415. package/flp/tasks/updateFlp.task.js.map +1 -0
  416. package/folder/createFolderModelModifier.d.ts +36 -0
  417. package/folder/createFolderModelModifier.js +61 -0
  418. package/folder/createFolderModelModifier.js.map +1 -0
  419. package/folder/createFolderTypeDefs.d.ts +8 -0
  420. package/folder/createFolderTypeDefs.js +175 -0
  421. package/folder/createFolderTypeDefs.js.map +1 -0
  422. package/folder/folder.gql.d.ts +4 -3
  423. package/folder/folder.gql.js +123 -101
  424. package/folder/folder.gql.js.map +1 -1
  425. package/folder/folder.types.d.ts +51 -58
  426. package/folder/folder.types.js +0 -5
  427. package/index.d.ts +3 -3
  428. package/index.js +12 -27
  429. package/index.js.map +1 -1
  430. package/package.json +34 -39
  431. package/types.d.ts +27 -22
  432. package/types.js +8 -38
  433. package/types.js.map +1 -1
  434. package/utils/FoldersCacheFactory.d.ts +10 -0
  435. package/utils/FoldersCacheFactory.js +25 -0
  436. package/utils/FoldersCacheFactory.js.map +1 -0
  437. package/utils/ListCache.d.ts +23 -0
  438. package/utils/ListCache.js +24 -0
  439. package/utils/ListCache.js.map +1 -0
  440. package/utils/Path.d.ts +3 -0
  441. package/utils/Path.js +10 -0
  442. package/utils/Path.js.map +1 -0
  443. package/utils/compress.d.ts +4 -0
  444. package/utils/compress.js +13 -0
  445. package/utils/compress.js.map +1 -0
  446. package/utils/createListSort.d.ts +3 -2
  447. package/utils/createListSort.js +6 -12
  448. package/utils/createListSort.js.map +1 -1
  449. package/utils/createOperationsWrapper.d.ts +6 -3
  450. package/utils/createOperationsWrapper.js +14 -28
  451. package/utils/createOperationsWrapper.js.map +1 -1
  452. package/utils/decorators/CmsEntriesCrudDecorators.d.ts +11 -0
  453. package/utils/decorators/CmsEntriesCrudDecorators.js +175 -0
  454. package/utils/decorators/CmsEntriesCrudDecorators.js.map +1 -0
  455. package/utils/decorators/FilterEntriesByFolderFactory.d.ts +7 -0
  456. package/utils/decorators/FilterEntriesByFolderFactory.js +22 -0
  457. package/utils/decorators/FilterEntriesByFolderFactory.js.map +1 -0
  458. package/utils/decorators/ListEntriesFactory.d.ts +17 -0
  459. package/utils/decorators/ListEntriesFactory.js +73 -0
  460. package/utils/decorators/ListEntriesFactory.js.map +1 -0
  461. package/utils/decorators/hasRootFolderId.d.ts +7 -0
  462. package/utils/decorators/hasRootFolderId.js +13 -0
  463. package/utils/decorators/hasRootFolderId.js.map +1 -0
  464. package/utils/decorators/isPageModel.d.ts +5 -0
  465. package/utils/decorators/isPageModel.js +8 -0
  466. package/utils/decorators/isPageModel.js.map +1 -0
  467. package/utils/ensureAuthentication.d.ts +2 -0
  468. package/utils/ensureAuthentication.js +11 -0
  469. package/utils/ensureAuthentication.js.map +1 -0
  470. package/utils/pickEntryFieldValues.d.ts +3 -0
  471. package/utils/pickEntryFieldValues.js +29 -0
  472. package/utils/pickEntryFieldValues.js.map +1 -0
  473. package/utils/resolve.d.ts +2 -2
  474. package/utils/resolve.js +10 -14
  475. package/utils/resolve.js.map +1 -1
  476. package/context/folders.d.ts +0 -2
  477. package/context/folders.js +0 -261
  478. package/context/folders.js.map +0 -1
  479. package/context/index.d.ts +0 -2
  480. package/context/index.js +0 -22
  481. package/context/index.js.map +0 -1
  482. package/context/links.d.ts +0 -2
  483. package/context/links.js +0 -270
  484. package/context/links.js.map +0 -1
  485. package/createAcoCrud.d.ts +0 -2
  486. package/createAcoCrud.js +0 -17
  487. package/createAcoCrud.js.map +0 -1
  488. package/createAcoFields.d.ts +0 -2
  489. package/createAcoFields.js +0 -40
  490. package/createAcoFields.js.map +0 -1
  491. package/createAcoHooks.d.ts +0 -2
  492. package/createAcoHooks.js +0 -11
  493. package/createAcoHooks.js.map +0 -1
  494. package/createAcoModels.d.ts +0 -2
  495. package/createAcoModels.js +0 -65
  496. package/createAcoModels.js.map +0 -1
  497. package/createAcoStorageOperations.d.ts +0 -10
  498. package/createAcoStorageOperations.js +0 -19
  499. package/createAcoStorageOperations.js.map +0 -1
  500. package/folder/folder.crud.d.ts +0 -3
  501. package/folder/folder.crud.js +0 -92
  502. package/folder/folder.crud.js.map +0 -1
  503. package/folder/folder.model.d.ts +0 -4
  504. package/folder/folder.model.js +0 -75
  505. package/folder/folder.model.js.map +0 -1
  506. package/folder/folder.so.d.ts +0 -3
  507. package/folder/folder.so.js +0 -151
  508. package/folder/folder.so.js.map +0 -1
  509. package/folder/folder.types.js.map +0 -1
  510. package/folder/onFolderBeforeDelete.hook.d.ts +0 -2
  511. package/folder/onFolderBeforeDelete.hook.js +0 -53
  512. package/folder/onFolderBeforeDelete.hook.js.map +0 -1
  513. package/graphql/base.gql.d.ts +0 -3
  514. package/graphql/base.gql.js +0 -63
  515. package/graphql/base.gql.js.map +0 -1
  516. package/graphql/folders.gql.d.ts +0 -3
  517. package/graphql/folders.gql.js +0 -126
  518. package/graphql/folders.gql.js.map +0 -1
  519. package/graphql/index.d.ts +0 -1
  520. package/graphql/index.js +0 -15
  521. package/graphql/index.js.map +0 -1
  522. package/graphql/links.gql.d.ts +0 -3
  523. package/graphql/links.gql.js +0 -123
  524. package/graphql/links.gql.js.map +0 -1
  525. package/record/record.crud.d.ts +0 -3
  526. package/record/record.crud.js +0 -92
  527. package/record/record.crud.js.map +0 -1
  528. package/record/record.gql.d.ts +0 -3
  529. package/record/record.gql.js +0 -123
  530. package/record/record.gql.js.map +0 -1
  531. package/record/record.model.d.ts +0 -4
  532. package/record/record.model.js +0 -62
  533. package/record/record.model.js.map +0 -1
  534. package/record/record.so.d.ts +0 -3
  535. package/record/record.so.js +0 -100
  536. package/record/record.so.js.map +0 -1
  537. package/record/record.types.d.ts +0 -96
  538. package/record/record.types.js +0 -5
  539. package/record/record.types.js.map +0 -1
  540. package/subscriptions/afterFolderDelete.d.ts +0 -3
  541. package/subscriptions/afterFolderDelete.js +0 -62
  542. package/subscriptions/afterFolderDelete.js.map +0 -1
  543. package/subscriptions/index.d.ts +0 -3
  544. package/subscriptions/index.js +0 -14
  545. package/subscriptions/index.js.map +0 -1
  546. package/utils/createModelField.d.ts +0 -5
  547. package/utils/createModelField.js +0 -37
  548. package/utils/createModelField.js.map +0 -1
  549. package/utils/fieldResolver.d.ts +0 -16
  550. package/utils/fieldResolver.js +0 -44
  551. package/utils/fieldResolver.js.map +0 -1
  552. package/utils/getFieldValues.d.ts +0 -2
  553. package/utils/getFieldValues.js +0 -19
  554. package/utils/getFieldValues.js.map +0 -1
  555. package/utils/isInstallationPending.d.ts +0 -4
  556. package/utils/isInstallationPending.js +0 -21
  557. package/utils/isInstallationPending.js.map +0 -1
  558. package/utils/modelFactory.d.ts +0 -15
  559. package/utils/modelFactory.js +0 -25
  560. package/utils/modelFactory.js.map +0 -1
@@ -0,0 +1,58 @@
1
+ import { Result, createDecorator } from "@webiny/feature/api";
2
+ import { FolderLevelPermissions } from "../../../flp/FolderLevelPermissions/index.js";
3
+ import { UpdateFolderUseCase } from "../abstractions.js";
4
+ import { GetFolderUseCase } from "../../GetFolder/index.js";
5
+ import { FolderCannotMoveToNewParent, FolderValidationError } from "../../../../domain/folder/errors.js";
6
+ class UpdateFolderWithFolderLevelPermissionsImpl {
7
+ constructor(getFolder, folderLevelPermissions, decoretee){
8
+ this.getFolder = getFolder;
9
+ this.folderLevelPermissions = folderLevelPermissions;
10
+ this.decoretee = decoretee;
11
+ }
12
+ async execute(id, params) {
13
+ const originalResult = await this.getFolder.execute(id);
14
+ if (originalResult.isFail()) return Result.fail(originalResult.error);
15
+ const original = originalResult.value;
16
+ const originalPermissions = await this.folderLevelPermissions.getFolderLevelPermissions(id);
17
+ await this.folderLevelPermissions.ensureCanAccessFolder({
18
+ permissions: originalPermissions,
19
+ rwd: "w"
20
+ });
21
+ const permissions = await this.folderLevelPermissions.getDefaultPermissions(params.permissions ?? []);
22
+ const stillHasAccess = await this.folderLevelPermissions.canAccessFolder({
23
+ permissions,
24
+ rwd: "w"
25
+ });
26
+ if (!stillHasAccess) return Result.fail(new FolderValidationError("Cannot continue because you would loose access to this folder."));
27
+ if (Array.isArray(params.permissions)) for (const permission of params.permissions){
28
+ const targetIsValid = permission.target.startsWith("admin:") || permission.target.startsWith("team:");
29
+ if (!targetIsValid) return Result.fail(new FolderValidationError(`Permission target "${permission.target}" is not valid.`));
30
+ if (permission.inheritedFrom) return Result.fail(new FolderValidationError('Permission "inheritedFrom" cannot be set manually.'));
31
+ }
32
+ if (params.parentId && params.parentId !== original.parentId) {
33
+ const parentPermissions = await this.folderLevelPermissions.getFolderLevelPermissions(params.parentId);
34
+ const canAccessFolder = await this.folderLevelPermissions.canAccessFolder({
35
+ permissions: parentPermissions,
36
+ rwd: "w"
37
+ });
38
+ if (!canAccessFolder) return Result.fail(new FolderCannotMoveToNewParent());
39
+ }
40
+ const result = await this.decoretee.execute(id, params);
41
+ if (result.isFail()) return Result.fail(result.error);
42
+ return Result.ok({
43
+ ...result.value,
44
+ permissions
45
+ });
46
+ }
47
+ }
48
+ const UpdateFolderWithFolderLevelPermissions = createDecorator({
49
+ abstraction: UpdateFolderUseCase,
50
+ decorator: UpdateFolderWithFolderLevelPermissionsImpl,
51
+ dependencies: [
52
+ GetFolderUseCase,
53
+ FolderLevelPermissions
54
+ ]
55
+ });
56
+ export { UpdateFolderWithFolderLevelPermissions };
57
+
58
+ //# sourceMappingURL=UpdateFolderWithFolderLevelPermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.js","sources":["../../../../../src/features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.ts"],"sourcesContent":["import { createDecorator, Result } from \"@webiny/feature/api\";\nimport type { UpdateFolderParams } from \"~/folder/folder.types.js\";\nimport { FolderLevelPermissions } from \"~/features/flp/FolderLevelPermissions/index.js\";\nimport { UpdateFolderUseCase } from \"../abstractions.js\";\nimport { GetFolderUseCase } from \"~/features/folder/GetFolder/index.js\";\nimport { FolderCannotMoveToNewParent, FolderValidationError } from \"~/domain/folder/errors.js\";\n\nclass UpdateFolderWithFolderLevelPermissionsImpl implements UpdateFolderUseCase.Interface {\n private folderLevelPermissions: FolderLevelPermissions.Interface;\n private readonly decoretee: UpdateFolderUseCase.Interface;\n\n constructor(\n private getFolder: GetFolderUseCase.Interface,\n folderLevelPermissions: FolderLevelPermissions.Interface,\n decoretee: UpdateFolderUseCase.Interface\n ) {\n this.folderLevelPermissions = folderLevelPermissions;\n this.decoretee = decoretee;\n }\n\n async execute(id: string, params: UpdateFolderParams): UpdateFolderUseCase.Return {\n const originalResult = await this.getFolder.execute(id);\n\n if (originalResult.isFail()) {\n return Result.fail(originalResult.error);\n }\n\n const original = originalResult.value;\n\n const originalPermissions = await this.folderLevelPermissions.getFolderLevelPermissions(id);\n\n // Let's ensure current identity's permission allows the update operation.\n await this.folderLevelPermissions.ensureCanAccessFolder({\n permissions: originalPermissions,\n rwd: \"w\"\n });\n\n const permissions = await this.folderLevelPermissions.getDefaultPermissions(\n params.permissions ?? []\n );\n\n // Check if the user still has access to the folder with the provided permissions.\n const stillHasAccess = await this.folderLevelPermissions.canAccessFolder({\n permissions,\n rwd: \"w\"\n });\n\n if (!stillHasAccess) {\n return Result.fail(\n new FolderValidationError(\n `Cannot continue because you would loose access to this folder.`\n )\n );\n }\n\n // Validate data.\n if (Array.isArray(params.permissions)) {\n for (const permission of params.permissions) {\n const targetIsValid =\n permission.target.startsWith(\"admin:\") || permission.target.startsWith(\"team:\");\n if (!targetIsValid) {\n return Result.fail(\n new FolderValidationError(\n `Permission target \"${permission.target}\" is not valid.`\n )\n );\n }\n\n if (permission.inheritedFrom) {\n return Result.fail(\n new FolderValidationError(\n `Permission \"inheritedFrom\" cannot be set manually.`\n )\n );\n }\n }\n }\n\n // Parent change is not allowed if the user doesn't have access to the new parent.\n if (params.parentId && params.parentId !== original.parentId) {\n // Getting the parent folder permissions will throw an error if the user doesn't have access.\n const parentPermissions = await this.folderLevelPermissions.getFolderLevelPermissions(\n params.parentId\n );\n\n const canAccessFolder = await this.folderLevelPermissions.canAccessFolder({\n permissions: parentPermissions,\n rwd: \"w\"\n });\n\n if (!canAccessFolder) {\n return Result.fail(new FolderCannotMoveToNewParent());\n }\n }\n\n const result = await this.decoretee.execute(id, params);\n\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n return Result.ok({\n ...result.value,\n permissions\n });\n }\n}\n\nexport const UpdateFolderWithFolderLevelPermissions = createDecorator({\n abstraction: UpdateFolderUseCase,\n decorator: UpdateFolderWithFolderLevelPermissionsImpl,\n dependencies: [GetFolderUseCase, FolderLevelPermissions]\n});\n"],"names":["UpdateFolderWithFolderLevelPermissionsImpl","getFolder","folderLevelPermissions","decoretee","id","params","originalResult","Result","original","originalPermissions","permissions","stillHasAccess","FolderValidationError","Array","permission","targetIsValid","parentPermissions","canAccessFolder","FolderCannotMoveToNewParent","result","UpdateFolderWithFolderLevelPermissions","createDecorator","UpdateFolderUseCase","GetFolderUseCase","FolderLevelPermissions"],"mappings":";;;;;AAOA,MAAMA;IAIF,YACYC,SAAqC,EAC7CC,sBAAwD,EACxDC,SAAwC,CAC1C;aAHUF,SAAS,GAATA;QAIR,IAAI,CAAC,sBAAsB,GAAGC;QAC9B,IAAI,CAAC,SAAS,GAAGC;IACrB;IAEA,MAAM,QAAQC,EAAU,EAAEC,MAA0B,EAA8B;QAC9E,MAAMC,iBAAiB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAACF;QAEpD,IAAIE,eAAe,MAAM,IACrB,OAAOC,OAAO,IAAI,CAACD,eAAe,KAAK;QAG3C,MAAME,WAAWF,eAAe,KAAK;QAErC,MAAMG,sBAAsB,MAAM,IAAI,CAAC,sBAAsB,CAAC,yBAAyB,CAACL;QAGxF,MAAM,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CAAC;YACpD,aAAaK;YACb,KAAK;QACT;QAEA,MAAMC,cAAc,MAAM,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CACvEL,OAAO,WAAW,IAAI,EAAE;QAI5B,MAAMM,iBAAiB,MAAM,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC;YACrED;YACA,KAAK;QACT;QAEA,IAAI,CAACC,gBACD,OAAOJ,OAAO,IAAI,CACd,IAAIK,sBACA;QAMZ,IAAIC,MAAM,OAAO,CAACR,OAAO,WAAW,GAChC,KAAK,MAAMS,cAAcT,OAAO,WAAW,CAAE;YACzC,MAAMU,gBACFD,WAAW,MAAM,CAAC,UAAU,CAAC,aAAaA,WAAW,MAAM,CAAC,UAAU,CAAC;YAC3E,IAAI,CAACC,eACD,OAAOR,OAAO,IAAI,CACd,IAAIK,sBACA,CAAC,mBAAmB,EAAEE,WAAW,MAAM,CAAC,eAAe,CAAC;YAKpE,IAAIA,WAAW,aAAa,EACxB,OAAOP,OAAO,IAAI,CACd,IAAIK,sBACA;QAIhB;QAIJ,IAAIP,OAAO,QAAQ,IAAIA,OAAO,QAAQ,KAAKG,SAAS,QAAQ,EAAE;YAE1D,MAAMQ,oBAAoB,MAAM,IAAI,CAAC,sBAAsB,CAAC,yBAAyB,CACjFX,OAAO,QAAQ;YAGnB,MAAMY,kBAAkB,MAAM,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC;gBACtE,aAAaD;gBACb,KAAK;YACT;YAEA,IAAI,CAACC,iBACD,OAAOV,OAAO,IAAI,CAAC,IAAIW;QAE/B;QAEA,MAAMC,SAAS,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAACf,IAAIC;QAEhD,IAAIc,OAAO,MAAM,IACb,OAAOZ,OAAO,IAAI,CAACY,OAAO,KAAK;QAGnC,OAAOZ,OAAO,EAAE,CAAC;YACb,GAAGY,OAAO,KAAK;YACfT;QACJ;IACJ;AACJ;AAEO,MAAMU,yCAAyCC,gBAAgB;IAClE,aAAaC;IACb,WAAWtB;IACX,cAAc;QAACuB;QAAkBC;KAAuB;AAC5D"}
@@ -0,0 +1,10 @@
1
+ import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
2
+ import type { FolderBeforeUpdatePayload, FolderAfterUpdatePayload } from "./abstractions.js";
3
+ export declare class FolderBeforeUpdateEvent extends DomainEvent<FolderBeforeUpdatePayload> {
4
+ eventType: "folder.beforeUpdate";
5
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher/abstractions.js").IEventHandler<DomainEvent<FolderBeforeUpdatePayload>>>;
6
+ }
7
+ export declare class FolderAfterUpdateEvent extends DomainEvent<FolderAfterUpdatePayload> {
8
+ eventType: "folder.afterUpdate";
9
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher/abstractions.js").IEventHandler<DomainEvent<FolderAfterUpdatePayload>>>;
10
+ }
@@ -0,0 +1,21 @@
1
+ import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
2
+ import { FolderAfterUpdateEventHandler, FolderBeforeUpdateEventHandler } from "./abstractions.js";
3
+ class FolderBeforeUpdateEvent extends DomainEvent {
4
+ getHandlerAbstraction() {
5
+ return FolderBeforeUpdateEventHandler;
6
+ }
7
+ constructor(...args){
8
+ super(...args), this.eventType = "folder.beforeUpdate";
9
+ }
10
+ }
11
+ class FolderAfterUpdateEvent extends DomainEvent {
12
+ getHandlerAbstraction() {
13
+ return FolderAfterUpdateEventHandler;
14
+ }
15
+ constructor(...args){
16
+ super(...args), this.eventType = "folder.afterUpdate";
17
+ }
18
+ }
19
+ export { FolderAfterUpdateEvent, FolderBeforeUpdateEvent };
20
+
21
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/folder/UpdateFolder/events.js","sources":["../../../../src/features/folder/UpdateFolder/events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { FolderBeforeUpdateEventHandler, FolderAfterUpdateEventHandler } from \"./abstractions.js\";\nimport type { FolderBeforeUpdatePayload, FolderAfterUpdatePayload } from \"./abstractions.js\";\n\n// FolderBeforeUpdate Event\nexport class FolderBeforeUpdateEvent extends DomainEvent<FolderBeforeUpdatePayload> {\n eventType = \"folder.beforeUpdate\" as const;\n\n getHandlerAbstraction() {\n return FolderBeforeUpdateEventHandler;\n }\n}\n\n// FolderAfterUpdate Event\nexport class FolderAfterUpdateEvent extends DomainEvent<FolderAfterUpdatePayload> {\n eventType = \"folder.afterUpdate\" as const;\n\n getHandlerAbstraction() {\n return FolderAfterUpdateEventHandler;\n }\n}\n"],"names":["FolderBeforeUpdateEvent","DomainEvent","FolderBeforeUpdateEventHandler","FolderAfterUpdateEvent","FolderAfterUpdateEventHandler"],"mappings":";;AAKO,MAAMA,gCAAgCC;IAGzC,wBAAwB;QACpB,OAAOC;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB;AAGO,MAAMC,+BAA+BF;IAGxC,wBAAwB;QACpB,OAAOG;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB"}
@@ -0,0 +1,5 @@
1
+ import type { Container } from "@webiny/di";
2
+ export declare const UpdateFolderFeature: {
3
+ name: string;
4
+ register(container: Container): void;
5
+ };
@@ -0,0 +1,15 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { UpdateFolderRepository } from "./UpdateFolderRepository.js";
3
+ import { UpdateFolderUseCase } from "./UpdateFolderUseCase.js";
4
+ import { UpdateFolderWithFolderLevelPermissions } from "./decorators/UpdateFolderWithFolderLevelPermissions.js";
5
+ const UpdateFolderFeature = createFeature({
6
+ name: "UpdateFolder",
7
+ register (container) {
8
+ container.register(UpdateFolderRepository).inSingletonScope();
9
+ container.register(UpdateFolderUseCase);
10
+ container.registerDecorator(UpdateFolderWithFolderLevelPermissions);
11
+ }
12
+ });
13
+ export { UpdateFolderFeature };
14
+
15
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/folder/UpdateFolder/feature.js","sources":["../../../../src/features/folder/UpdateFolder/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport type { Container } from \"@webiny/di\";\nimport { UpdateFolderRepository } from \"./UpdateFolderRepository.js\";\nimport { UpdateFolderUseCase } from \"./UpdateFolderUseCase.js\";\nimport { UpdateFolderWithFolderLevelPermissions } from \"./decorators/UpdateFolderWithFolderLevelPermissions.js\";\n\nexport const UpdateFolderFeature = createFeature({\n name: \"UpdateFolder\",\n register(container: Container) {\n container.register(UpdateFolderRepository).inSingletonScope();\n container.register(UpdateFolderUseCase);\n container.registerDecorator(UpdateFolderWithFolderLevelPermissions);\n }\n});\n"],"names":["UpdateFolderFeature","createFeature","container","UpdateFolderRepository","UpdateFolderUseCase","UpdateFolderWithFolderLevelPermissions"],"mappings":";;;;AAMO,MAAMA,sBAAsBC,cAAc;IAC7C,MAAM;IACN,UAASC,SAAoB;QACzBA,UAAU,QAAQ,CAACC,wBAAwB,gBAAgB;QAC3DD,UAAU,QAAQ,CAACE;QACnBF,UAAU,iBAAiB,CAACG;IAChC;AACJ"}
@@ -0,0 +1,2 @@
1
+ export { UpdateFolderFeature } from "./feature.js";
2
+ export { FolderAfterUpdateEventHandler, FolderBeforeUpdateEventHandler, UpdateFolderUseCase } from "./abstractions.js";
@@ -0,0 +1,2 @@
1
+ export { UpdateFolderFeature } from "./feature.js";
2
+ export { FolderAfterUpdateEventHandler, FolderBeforeUpdateEventHandler, UpdateFolderUseCase } from "./abstractions.js";
@@ -0,0 +1,5 @@
1
+ import type { CmsEntry } from "@webiny/api-headless-cms/types";
2
+ import type { CmsEntryFolder, Folder } from "../../../folder/folder.types.js";
3
+ export declare class EntryToFolderMapper {
4
+ static toFolder(entry: CmsEntry<CmsEntryFolder>): Folder;
5
+ }
@@ -0,0 +1,23 @@
1
+ class EntryToFolderMapper {
2
+ static toFolder(entry) {
3
+ return {
4
+ id: entry.entryId,
5
+ createdOn: entry.createdOn,
6
+ modifiedOn: entry.modifiedOn ?? null,
7
+ savedOn: entry.savedOn,
8
+ createdBy: entry.createdBy,
9
+ modifiedBy: entry.modifiedBy ?? null,
10
+ savedBy: entry.savedBy,
11
+ title: entry.values.title,
12
+ slug: entry.values.slug,
13
+ permissions: entry.values.permissions,
14
+ type: entry.values.type,
15
+ parentId: entry.values.parentId ?? null,
16
+ path: entry.values.path,
17
+ extensions: entry.values.extensions
18
+ };
19
+ }
20
+ }
21
+ export { EntryToFolderMapper };
22
+
23
+ //# sourceMappingURL=EntryToFolderMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/folder/shared/EntryToFolderMapper.js","sources":["../../../../src/features/folder/shared/EntryToFolderMapper.ts"],"sourcesContent":["import type { CmsEntry } from \"@webiny/api-headless-cms/types\";\nimport type { CmsEntryFolder, Folder } from \"~/folder/folder.types.js\";\n\nexport class EntryToFolderMapper {\n static toFolder(entry: CmsEntry<CmsEntryFolder>): Folder {\n return {\n id: entry.entryId,\n createdOn: entry.createdOn,\n modifiedOn: entry.modifiedOn ?? null,\n savedOn: entry.savedOn,\n createdBy: entry.createdBy,\n modifiedBy: entry.modifiedBy ?? null,\n savedBy: entry.savedBy,\n title: entry.values.title,\n slug: entry.values.slug,\n permissions: entry.values.permissions,\n type: entry.values.type,\n parentId: entry.values.parentId ?? null,\n path: entry.values.path,\n extensions: entry.values.extensions\n };\n }\n}\n"],"names":["EntryToFolderMapper","entry"],"mappings":"AAGO,MAAMA;IACT,OAAO,SAASC,KAA+B,EAAU;QACrD,OAAO;YACH,IAAIA,MAAM,OAAO;YACjB,WAAWA,MAAM,SAAS;YAC1B,YAAYA,MAAM,UAAU,IAAI;YAChC,SAASA,MAAM,OAAO;YACtB,WAAWA,MAAM,SAAS;YAC1B,YAAYA,MAAM,UAAU,IAAI;YAChC,SAASA,MAAM,OAAO;YACtB,OAAOA,MAAM,MAAM,CAAC,KAAK;YACzB,MAAMA,MAAM,MAAM,CAAC,IAAI;YACvB,aAAaA,MAAM,MAAM,CAAC,WAAW;YACrC,MAAMA,MAAM,MAAM,CAAC,IAAI;YACvB,UAAUA,MAAM,MAAM,CAAC,QAAQ,IAAI;YACnC,MAAMA,MAAM,MAAM,CAAC,IAAI;YACvB,YAAYA,MAAM,MAAM,CAAC,UAAU;QACvC;IACJ;AACJ"}
@@ -0,0 +1,10 @@
1
+ import type { AcoStorageOperations as IAcoStorageOperations } from "../../../types.js";
2
+ /** Storage operations for folder filtering. */
3
+ export declare const FilterStorageOperations: import("@webiny/di").Abstraction<import("~/types.js").AcoFilterStorageOperations>;
4
+ export declare namespace FilterStorageOperations {
5
+ type Interface = IAcoStorageOperations["filter"];
6
+ }
7
+ export declare const FlpStorageOperations: import("@webiny/di").Abstraction<import("~/types.js").AcoFolderLevelPermissionsStorageOperations>;
8
+ export declare namespace FlpStorageOperations {
9
+ type Interface = IAcoStorageOperations["flp"];
10
+ }
@@ -0,0 +1,6 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const FilterStorageOperations = createAbstraction("FilterStorageOperations");
3
+ const FlpStorageOperations = createAbstraction("FlpStorageOperations");
4
+ export { FilterStorageOperations, FlpStorageOperations };
5
+
6
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/folder/shared/abstractions.js","sources":["../../../../src/features/folder/shared/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { AcoStorageOperations as IAcoStorageOperations } from \"~/types.js\";\n\n/** Storage operations for folder filtering. */\nexport const FilterStorageOperations =\n createAbstraction<IAcoStorageOperations[\"filter\"]>(\"FilterStorageOperations\");\n\nexport namespace FilterStorageOperations {\n export type Interface = IAcoStorageOperations[\"filter\"];\n}\n\nexport const FlpStorageOperations =\n createAbstraction<IAcoStorageOperations[\"flp\"]>(\"FlpStorageOperations\");\n\nexport namespace FlpStorageOperations {\n export type Interface = IAcoStorageOperations[\"flp\"];\n}\n"],"names":["FilterStorageOperations","createAbstraction","FlpStorageOperations"],"mappings":";AAIO,MAAMA,0BACTC,kBAAmD;AAMhD,MAAMC,uBACTD,kBAAgD"}
@@ -0,0 +1,3 @@
1
+ import type { CreateAcoParams } from "../types.js";
2
+ import type { AcoFilterCrud } from "./filter.types.js";
3
+ export declare const createFilterCrudMethods: ({ storageOperations }: CreateAcoParams) => AcoFilterCrud;
@@ -0,0 +1,30 @@
1
+ const createFilterCrudMethods = ({ storageOperations })=>({
2
+ async get (id) {
3
+ return storageOperations.filter.getFilter({
4
+ id
5
+ });
6
+ },
7
+ async list (params) {
8
+ return storageOperations.filter.listFilters(params);
9
+ },
10
+ async create (data) {
11
+ return storageOperations.filter.createFilter({
12
+ data
13
+ });
14
+ },
15
+ async update (id, data) {
16
+ return await storageOperations.filter.updateFilter({
17
+ id,
18
+ data
19
+ });
20
+ },
21
+ async delete (id) {
22
+ await storageOperations.filter.deleteFilter({
23
+ id
24
+ });
25
+ return true;
26
+ }
27
+ });
28
+ export { createFilterCrudMethods };
29
+
30
+ //# sourceMappingURL=filter.crud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter/filter.crud.js","sources":["../../src/filter/filter.crud.ts"],"sourcesContent":["import type { CreateAcoParams } from \"~/types.js\";\nimport type { AcoFilterCrud } from \"./filter.types.js\";\n\nexport const createFilterCrudMethods = ({ storageOperations }: CreateAcoParams): AcoFilterCrud => {\n return {\n async get(id) {\n return storageOperations.filter.getFilter({ id });\n },\n async list(params) {\n return storageOperations.filter.listFilters(params);\n },\n async create(data) {\n return storageOperations.filter.createFilter({ data });\n },\n async update(id, data) {\n return await storageOperations.filter.updateFilter({ id, data });\n },\n async delete(id: string) {\n await storageOperations.filter.deleteFilter({ id });\n return true;\n }\n };\n};\n"],"names":["createFilterCrudMethods","storageOperations","id","params","data"],"mappings":"AAGO,MAAMA,0BAA0B,CAAC,EAAEC,iBAAiB,EAAmB,GACnE;QACH,MAAM,KAAIC,EAAE;YACR,OAAOD,kBAAkB,MAAM,CAAC,SAAS,CAAC;gBAAEC;YAAG;QACnD;QACA,MAAM,MAAKC,MAAM;YACb,OAAOF,kBAAkB,MAAM,CAAC,WAAW,CAACE;QAChD;QACA,MAAM,QAAOC,IAAI;YACb,OAAOH,kBAAkB,MAAM,CAAC,YAAY,CAAC;gBAAEG;YAAK;QACxD;QACA,MAAM,QAAOF,EAAE,EAAEE,IAAI;YACjB,OAAO,MAAMH,kBAAkB,MAAM,CAAC,YAAY,CAAC;gBAAEC;gBAAIE;YAAK;QAClE;QACA,MAAM,QAAOF,EAAU;YACnB,MAAMD,kBAAkB,MAAM,CAAC,YAAY,CAAC;gBAAEC;YAAG;YACjD,OAAO;QACX;IACJ"}
@@ -0,0 +1,3 @@
1
+ import { GraphQLSchemaPlugin } from "@webiny/handler-graphql/plugins/GraphQLSchemaPlugin.js";
2
+ import type { AcoContext } from "../types.js";
3
+ export declare const filterSchema: GraphQLSchemaPlugin<AcoContext>;
@@ -0,0 +1,130 @@
1
+ import { ErrorResponse, ListResponse } from "@webiny/handler-graphql/responses.js";
2
+ import { GraphQLSchemaPlugin } from "@webiny/handler-graphql/plugins/GraphQLSchemaPlugin.js";
3
+ import { ensureAuthentication } from "../utils/ensureAuthentication.js";
4
+ import { resolve } from "../utils/resolve.js";
5
+ const filterSchema = new GraphQLSchemaPlugin({
6
+ typeDefs: `
7
+ enum OperationEnum {
8
+ AND
9
+ OR
10
+ }
11
+
12
+ type GroupFilter {
13
+ field: String!
14
+ condition: String!
15
+ value: String!
16
+ }
17
+
18
+ type Group {
19
+ operation: OperationEnum!
20
+ filters: [GroupFilter]!
21
+ }
22
+
23
+ type Filter {
24
+ id: ID!
25
+ name: String!
26
+ description: String
27
+ namespace: String!
28
+ operation: OperationEnum!
29
+ groups: [Group]!
30
+ createdOn: DateTime
31
+ modifiedOn: DateTime
32
+ savedOn: DateTime
33
+ createdBy: AcoUser
34
+ modifiedBy: AcoUser
35
+ savedBy: AcoUser
36
+ }
37
+
38
+ input GroupFilterInput {
39
+ field: String!
40
+ condition: String!
41
+ value: String!
42
+ }
43
+
44
+ input GroupInput {
45
+ operation: OperationEnum!
46
+ filters: [GroupFilterInput]!
47
+ }
48
+
49
+ input FilterCreateInput {
50
+ id: ID!
51
+ name: String!
52
+ description: String
53
+ namespace: String!
54
+ operation: OperationEnum!
55
+ groups: [GroupInput]!
56
+ }
57
+
58
+ input FilterUpdateInput {
59
+ name: String
60
+ description: String
61
+ namespace: String
62
+ operation: OperationEnum
63
+ groups: [GroupInput]
64
+ }
65
+
66
+ input FiltersListWhereInput {
67
+ namespace: String
68
+ }
69
+
70
+ type FilterResponse {
71
+ data: Filter
72
+ error: AcoError
73
+ }
74
+
75
+ type FilterListResponse {
76
+ data: [Filter]
77
+ error: AcoError
78
+ }
79
+
80
+ extend type AcoQuery {
81
+ getFilter(id: ID!): FilterResponse
82
+ listFilters(
83
+ where: FiltersListWhereInput!
84
+ limit: Int
85
+ after: String
86
+ sort: AcoSort
87
+ ): FilterListResponse
88
+ }
89
+
90
+ extend type AcoMutation {
91
+ createFilter(data: FilterCreateInput!): FilterResponse
92
+ updateFilter(id: ID!, data: FilterUpdateInput!): FilterResponse
93
+ deleteFilter(id: ID!): AcoBooleanResponse
94
+ }
95
+ `,
96
+ resolvers: {
97
+ AcoQuery: {
98
+ getFilter: async (_, { id }, context)=>resolve(()=>{
99
+ ensureAuthentication(context);
100
+ return context.aco.filter.get(id);
101
+ }),
102
+ listFilters: async (_, args, context)=>{
103
+ try {
104
+ ensureAuthentication(context);
105
+ const [entries, meta] = await context.aco.filter.list(args);
106
+ return new ListResponse(entries, meta);
107
+ } catch (e) {
108
+ return new ErrorResponse(e);
109
+ }
110
+ }
111
+ },
112
+ AcoMutation: {
113
+ createFilter: async (_, { data }, context)=>resolve(()=>{
114
+ ensureAuthentication(context);
115
+ return context.aco.filter.create(data);
116
+ }),
117
+ updateFilter: async (_, { id, data }, context)=>resolve(()=>{
118
+ ensureAuthentication(context);
119
+ return context.aco.filter.update(id, data);
120
+ }),
121
+ deleteFilter: async (_, { id }, context)=>resolve(()=>{
122
+ ensureAuthentication(context);
123
+ return context.aco.filter.delete(id);
124
+ })
125
+ }
126
+ }
127
+ });
128
+ export { filterSchema };
129
+
130
+ //# sourceMappingURL=filter.gql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter/filter.gql.js","sources":["../../src/filter/filter.gql.ts"],"sourcesContent":["import { ErrorResponse, ListResponse } from \"@webiny/handler-graphql/responses.js\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/GraphQLSchemaPlugin.js\";\n\nimport { ensureAuthentication } from \"~/utils/ensureAuthentication.js\";\nimport { resolve } from \"~/utils/resolve.js\";\n\nimport type { AcoContext } from \"~/types.js\";\n\nexport const filterSchema = new GraphQLSchemaPlugin<AcoContext>({\n typeDefs: /* GraphQL */ `\n enum OperationEnum {\n AND\n OR\n }\n\n type GroupFilter {\n field: String!\n condition: String!\n value: String!\n }\n\n type Group {\n operation: OperationEnum!\n filters: [GroupFilter]!\n }\n\n type Filter {\n id: ID!\n name: String!\n description: String\n namespace: String!\n operation: OperationEnum!\n groups: [Group]!\n createdOn: DateTime\n modifiedOn: DateTime\n savedOn: DateTime\n createdBy: AcoUser\n modifiedBy: AcoUser\n savedBy: AcoUser\n }\n\n input GroupFilterInput {\n field: String!\n condition: String!\n value: String!\n }\n\n input GroupInput {\n operation: OperationEnum!\n filters: [GroupFilterInput]!\n }\n\n input FilterCreateInput {\n id: ID!\n name: String!\n description: String\n namespace: String!\n operation: OperationEnum!\n groups: [GroupInput]!\n }\n\n input FilterUpdateInput {\n name: String\n description: String\n namespace: String\n operation: OperationEnum\n groups: [GroupInput]\n }\n\n input FiltersListWhereInput {\n namespace: String\n }\n\n type FilterResponse {\n data: Filter\n error: AcoError\n }\n\n type FilterListResponse {\n data: [Filter]\n error: AcoError\n }\n\n extend type AcoQuery {\n getFilter(id: ID!): FilterResponse\n listFilters(\n where: FiltersListWhereInput!\n limit: Int\n after: String\n sort: AcoSort\n ): FilterListResponse\n }\n\n extend type AcoMutation {\n createFilter(data: FilterCreateInput!): FilterResponse\n updateFilter(id: ID!, data: FilterUpdateInput!): FilterResponse\n deleteFilter(id: ID!): AcoBooleanResponse\n }\n `,\n resolvers: {\n AcoQuery: {\n getFilter: async (_, { id }, context) => {\n return resolve(() => {\n ensureAuthentication(context);\n return context.aco.filter.get(id);\n });\n },\n listFilters: async (_, args: any, context) => {\n try {\n ensureAuthentication(context);\n const [entries, meta] = await context.aco.filter.list(args);\n return new ListResponse(entries, meta);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n },\n AcoMutation: {\n createFilter: async (_, { data }, context) => {\n return resolve(() => {\n ensureAuthentication(context);\n return context.aco.filter.create(data);\n });\n },\n updateFilter: async (_, { id, data }, context) => {\n return resolve(() => {\n ensureAuthentication(context);\n return context.aco.filter.update(id, data);\n });\n },\n deleteFilter: async (_, { id }, context) => {\n return resolve(() => {\n ensureAuthentication(context);\n return context.aco.filter.delete(id);\n });\n }\n }\n }\n});\n"],"names":["filterSchema","GraphQLSchemaPlugin","_","id","context","resolve","ensureAuthentication","args","entries","meta","ListResponse","e","ErrorResponse","data"],"mappings":";;;;AAQO,MAAMA,eAAe,IAAIC,oBAAgC;IAC5D,UAAwB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyFzB,CAAC;IACD,WAAW;QACP,UAAU;YACN,WAAW,OAAOC,GAAG,EAAEC,EAAE,EAAE,EAAEC,UAClBC,QAAQ;oBACXC,qBAAqBF;oBACrB,OAAOA,QAAQ,GAAG,CAAC,MAAM,CAAC,GAAG,CAACD;gBAClC;YAEJ,aAAa,OAAOD,GAAGK,MAAWH;gBAC9B,IAAI;oBACAE,qBAAqBF;oBACrB,MAAM,CAACI,SAASC,KAAK,GAAG,MAAML,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,CAACG;oBACtD,OAAO,IAAIG,aAAaF,SAASC;gBACrC,EAAE,OAAOE,GAAG;oBACR,OAAO,IAAIC,cAAcD;gBAC7B;YACJ;QACJ;QACA,aAAa;YACT,cAAc,OAAOT,GAAG,EAAEW,IAAI,EAAE,EAAET,UACvBC,QAAQ;oBACXC,qBAAqBF;oBACrB,OAAOA,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,CAACS;gBACrC;YAEJ,cAAc,OAAOX,GAAG,EAAEC,EAAE,EAAEU,IAAI,EAAE,EAAET,UAC3BC,QAAQ;oBACXC,qBAAqBF;oBACrB,OAAOA,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,CAACD,IAAIU;gBACzC;YAEJ,cAAc,OAAOX,GAAG,EAAEC,EAAE,EAAE,EAAEC,UACrBC,QAAQ;oBACXC,qBAAqBF;oBACrB,OAAOA,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,CAACD;gBACrC;QAER;IACJ;AACJ"}
@@ -0,0 +1,9 @@
1
+ import { ModelFactory } from "@webiny/api-headless-cms/features/modelBuilder/index.js";
2
+ export declare const FILTER_MODEL_ID: string;
3
+ declare class FilterPrivateModelImpl implements ModelFactory.Interface {
4
+ execute(builder: ModelFactory.Builder): Promise<import("@webiny/api-headless-cms/features/modelBuilder/index.js").PrivateModelBuilder[]>;
5
+ }
6
+ export declare const FilterPrivateModel: typeof FilterPrivateModelImpl & {
7
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-headless-cms/features/modelBuilder/abstractions").IModelFactory>;
8
+ };
9
+ export {};
@@ -0,0 +1,50 @@
1
+ import { ModelFactory } from "@webiny/api-headless-cms/features/modelBuilder/index.js";
2
+ const FILTER_MODEL_ID = process.env.WEBINY_API_LEGACY_MODELS ? "acoFilter" : "wbyAcoFilter";
3
+ class FilterPrivateModelImpl {
4
+ async execute(builder) {
5
+ return [
6
+ builder.private({
7
+ modelId: FILTER_MODEL_ID,
8
+ name: "ACO - Filter"
9
+ }).fields((fields)=>({
10
+ name: fields.text().label("Name").required(),
11
+ description: fields.text().label("Description"),
12
+ namespace: fields.text().label("Model Id").required(),
13
+ operation: fields.text().label("Operation").required().predefinedValues([
14
+ {
15
+ label: "AND",
16
+ value: "AND"
17
+ },
18
+ {
19
+ label: "OR",
20
+ value: "OR"
21
+ }
22
+ ]),
23
+ groups: fields.object().label("Groups").list().listMinLength(1, "At least one group is required.").fields((fields)=>({
24
+ operation: fields.text().label("Operation").required().predefinedValues([
25
+ {
26
+ label: "AND",
27
+ value: "AND"
28
+ },
29
+ {
30
+ label: "OR",
31
+ value: "OR"
32
+ }
33
+ ]),
34
+ filters: fields.object().label("Filters").list().listMinLength(1, "At least one filter is required.").fields((filterFields)=>({
35
+ field: filterFields.text().label("Field").required(),
36
+ condition: filterFields.text().label("Condition").required(),
37
+ value: filterFields.text().label("Value").required()
38
+ }))
39
+ }))
40
+ }))
41
+ ];
42
+ }
43
+ }
44
+ const FilterPrivateModel = ModelFactory.createImplementation({
45
+ implementation: FilterPrivateModelImpl,
46
+ dependencies: []
47
+ });
48
+ export { FILTER_MODEL_ID, FilterPrivateModel };
49
+
50
+ //# sourceMappingURL=filter.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter/filter.model.js","sources":["../../src/filter/filter.model.ts"],"sourcesContent":["import { ModelFactory } from \"@webiny/api-headless-cms/features/modelBuilder/index.js\";\n\nexport const FILTER_MODEL_ID = process.env.WEBINY_API_LEGACY_MODELS ? \"acoFilter\" : \"wbyAcoFilter\";\n\nclass FilterPrivateModelImpl implements ModelFactory.Interface {\n public async execute(builder: ModelFactory.Builder) {\n return [\n builder\n .private({\n modelId: FILTER_MODEL_ID,\n name: \"ACO - Filter\"\n })\n .fields(fields => ({\n name: fields.text().label(\"Name\").required(),\n description: fields.text().label(\"Description\"),\n namespace: fields.text().label(\"Model Id\").required(),\n operation: fields\n .text()\n .label(\"Operation\")\n .required()\n .predefinedValues([\n {\n label: \"AND\",\n value: \"AND\"\n },\n {\n label: \"OR\",\n value: \"OR\"\n }\n ]),\n groups: fields\n .object()\n .label(\"Groups\")\n .list()\n .listMinLength(1, \"At least one group is required.\")\n .fields(fields => ({\n operation: fields\n .text()\n .label(\"Operation\")\n .required()\n .predefinedValues([\n {\n label: \"AND\",\n value: \"AND\"\n },\n {\n label: \"OR\",\n value: \"OR\"\n }\n ]),\n filters: fields\n .object()\n .label(\"Filters\")\n .list()\n .listMinLength(1, \"At least one filter is required.\")\n .fields(filterFields => ({\n field: filterFields.text().label(\"Field\").required(),\n condition: filterFields.text().label(\"Condition\").required(),\n value: filterFields.text().label(\"Value\").required()\n }))\n }))\n }))\n ];\n }\n}\n\nexport const FilterPrivateModel = ModelFactory.createImplementation({\n implementation: FilterPrivateModelImpl,\n dependencies: []\n});\n"],"names":["FILTER_MODEL_ID","process","FilterPrivateModelImpl","builder","fields","filterFields","FilterPrivateModel","ModelFactory"],"mappings":";AAEO,MAAMA,kBAAkBC,QAAQ,GAAG,CAAC,wBAAwB,GAAG,cAAc;AAEpF,MAAMC;IACF,MAAa,QAAQC,OAA6B,EAAE;QAChD,OAAO;YACHA,QACK,OAAO,CAAC;gBACL,SAASH;gBACT,MAAM;YACV,GACC,MAAM,CAACI,CAAAA,SAAW;oBACf,MAAMA,OAAO,IAAI,GAAG,KAAK,CAAC,QAAQ,QAAQ;oBAC1C,aAAaA,OAAO,IAAI,GAAG,KAAK,CAAC;oBACjC,WAAWA,OAAO,IAAI,GAAG,KAAK,CAAC,YAAY,QAAQ;oBACnD,WAAWA,OACN,IAAI,GACJ,KAAK,CAAC,aACN,QAAQ,GACR,gBAAgB,CAAC;wBACd;4BACI,OAAO;4BACP,OAAO;wBACX;wBACA;4BACI,OAAO;4BACP,OAAO;wBACX;qBACH;oBACL,QAAQA,OACH,MAAM,GACN,KAAK,CAAC,UACN,IAAI,GACJ,aAAa,CAAC,GAAG,mCACjB,MAAM,CAACA,CAAAA,SAAW;4BACf,WAAWA,OACN,IAAI,GACJ,KAAK,CAAC,aACN,QAAQ,GACR,gBAAgB,CAAC;gCACd;oCACI,OAAO;oCACP,OAAO;gCACX;gCACA;oCACI,OAAO;oCACP,OAAO;gCACX;6BACH;4BACL,SAASA,OACJ,MAAM,GACN,KAAK,CAAC,WACN,IAAI,GACJ,aAAa,CAAC,GAAG,oCACjB,MAAM,CAACC,CAAAA,eAAiB;oCACrB,OAAOA,aAAa,IAAI,GAAG,KAAK,CAAC,SAAS,QAAQ;oCAClD,WAAWA,aAAa,IAAI,GAAG,KAAK,CAAC,aAAa,QAAQ;oCAC1D,OAAOA,aAAa,IAAI,GAAG,KAAK,CAAC,SAAS,QAAQ;gCACtD;wBACR;gBACR;SACP;IACL;AACJ;AAEO,MAAMC,qBAAqBC,aAAa,oBAAoB,CAAC;IAChE,gBAAgBL;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,11 @@
1
+ import type { HeadlessCms } from "@webiny/api-headless-cms/types/index.js";
2
+ import type { Security } from "@webiny/api-core/types/security.js";
3
+ import type { Container } from "@webiny/di";
4
+ interface CreateFilterOperationsParams {
5
+ cms: HeadlessCms;
6
+ security: Security;
7
+ container: Container;
8
+ }
9
+ import type { AcoFilterStorageOperations } from "./filter.types.js";
10
+ export declare const createFilterOperations: (params: CreateFilterOperationsParams) => AcoFilterStorageOperations;
11
+ export {};
@@ -0,0 +1,84 @@
1
+ import omit from "lodash/omit.js";
2
+ import error from "@webiny/error";
3
+ import { FILTER_MODEL_ID } from "./filter.model.js";
4
+ import { createListSort } from "../utils/createListSort.js";
5
+ import { createOperationsWrapper } from "../utils/createOperationsWrapper.js";
6
+ import { pickEntryFieldValues } from "../utils/pickEntryFieldValues.js";
7
+ import { ENTRY_META_FIELDS } from "@webiny/api-headless-cms/constants.js";
8
+ import { CmsSortMapper, CmsWhereMapper } from "@webiny/api-headless-cms";
9
+ const createFilterOperations = (params)=>{
10
+ const { cms, security, container } = params;
11
+ const { withModel } = createOperationsWrapper({
12
+ ...params,
13
+ modelName: FILTER_MODEL_ID
14
+ });
15
+ const cmsWhereMapper = container.resolve(CmsWhereMapper);
16
+ const cmsSortMapper = container.resolve(CmsSortMapper);
17
+ return {
18
+ getFilter ({ id }) {
19
+ return withModel(async (model)=>{
20
+ const entry = await cms.getEntryById(model, id);
21
+ if (!entry) throw new error("Could not load filter.", "GET_FILTER_ERROR", {
22
+ id
23
+ });
24
+ return pickEntryFieldValues(entry);
25
+ });
26
+ },
27
+ listFilters (params) {
28
+ return withModel(async (model)=>{
29
+ const { sort, where } = params;
30
+ const createdBy = security.getIdentity().id;
31
+ const [entries, meta] = await cms.listLatestEntries(model, {
32
+ ...params,
33
+ sort: cmsSortMapper.map({
34
+ input: createListSort(sort),
35
+ fields: model.fields
36
+ }),
37
+ where: cmsWhereMapper.map({
38
+ input: {
39
+ ...where,
40
+ createdBy
41
+ },
42
+ fields: model.fields
43
+ })
44
+ });
45
+ return [
46
+ entries.map(pickEntryFieldValues),
47
+ meta
48
+ ];
49
+ });
50
+ },
51
+ createFilter ({ data }) {
52
+ return withModel(async (model)=>{
53
+ const entry = await cms.createEntry(model, {
54
+ id: data.id,
55
+ values: data
56
+ });
57
+ return pickEntryFieldValues(entry);
58
+ });
59
+ },
60
+ updateFilter ({ id, data }) {
61
+ return withModel(async (model)=>{
62
+ const original = await cms.getEntryById(model, id);
63
+ const input = {
64
+ ...omit(original, ENTRY_META_FIELDS),
65
+ values: {
66
+ ...original.values,
67
+ ...data
68
+ }
69
+ };
70
+ const entry = await cms.updateEntry(model, original.id, input);
71
+ return pickEntryFieldValues(entry);
72
+ });
73
+ },
74
+ deleteFilter ({ id }) {
75
+ return withModel(async (model)=>{
76
+ await cms.deleteEntry(model, id);
77
+ return true;
78
+ });
79
+ }
80
+ };
81
+ };
82
+ export { createFilterOperations };
83
+
84
+ //# sourceMappingURL=filter.so.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter/filter.so.js","sources":["../../src/filter/filter.so.ts"],"sourcesContent":["import omit from \"lodash/omit.js\";\nimport WebinyError from \"@webiny/error\";\nimport { FILTER_MODEL_ID } from \"./filter.model.js\";\nimport type { HeadlessCms } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { Security } from \"@webiny/api-core/types/security.js\";\nimport type { Container } from \"@webiny/di\";\n\ninterface CreateFilterOperationsParams {\n cms: HeadlessCms;\n security: Security;\n container: Container;\n}\nimport { createListSort } from \"~/utils/createListSort.js\";\nimport { createOperationsWrapper } from \"~/utils/createOperationsWrapper.js\";\nimport { pickEntryFieldValues } from \"~/utils/pickEntryFieldValues.js\";\nimport type { AcoFilterStorageOperations, Filter } from \"./filter.types.js\";\nimport { ENTRY_META_FIELDS } from \"@webiny/api-headless-cms/constants.js\";\nimport { CmsSortMapper, CmsWhereMapper } from \"@webiny/api-headless-cms\";\n\nexport const createFilterOperations = (\n params: CreateFilterOperationsParams\n): AcoFilterStorageOperations => {\n const { cms, security, container } = params;\n\n const { withModel } = createOperationsWrapper({\n ...params,\n modelName: FILTER_MODEL_ID\n });\n\n const cmsWhereMapper = container.resolve(CmsWhereMapper);\n const cmsSortMapper = container.resolve(CmsSortMapper);\n\n return {\n getFilter({ id }) {\n return withModel(async model => {\n const entry = await cms.getEntryById(model, id);\n\n if (!entry) {\n throw new WebinyError(\"Could not load filter.\", \"GET_FILTER_ERROR\", {\n id\n });\n }\n\n return pickEntryFieldValues(entry);\n });\n },\n listFilters(params) {\n return withModel(async model => {\n const { sort, where } = params;\n const createdBy = security.getIdentity().id;\n\n const [entries, meta] = await cms.listLatestEntries(model, {\n ...params,\n sort: cmsSortMapper.map({\n input: createListSort(sort),\n fields: model.fields\n }),\n where: cmsWhereMapper.map({\n input: {\n ...where,\n createdBy\n },\n fields: model.fields\n })\n });\n\n return [entries.map(pickEntryFieldValues<Filter>), meta];\n });\n },\n createFilter({ data }) {\n return withModel(async model => {\n const entry = await cms.createEntry(model, {\n id: data.id,\n values: data\n });\n return pickEntryFieldValues(entry);\n });\n },\n updateFilter({ id, data }) {\n return withModel(async model => {\n const original = await cms.getEntryById(model, id);\n\n const input = {\n /**\n * We are omitting the standard entry meta fields:\n * we don't want to override them with the ones coming from the `original` entry.\n */\n ...omit(original, ENTRY_META_FIELDS),\n values: {\n ...original.values,\n ...data\n }\n };\n\n const entry = await cms.updateEntry(model, original.id, input);\n return pickEntryFieldValues(entry);\n });\n },\n deleteFilter({ id }) {\n return withModel(async model => {\n await cms.deleteEntry(model, id);\n return true;\n });\n }\n };\n};\n"],"names":["createFilterOperations","params","cms","security","container","withModel","createOperationsWrapper","FILTER_MODEL_ID","cmsWhereMapper","CmsWhereMapper","cmsSortMapper","CmsSortMapper","id","model","entry","WebinyError","pickEntryFieldValues","sort","where","createdBy","entries","meta","createListSort","data","original","input","omit","ENTRY_META_FIELDS"],"mappings":";;;;;;;;AAmBO,MAAMA,yBAAyB,CAClCC;IAEA,MAAM,EAAEC,GAAG,EAAEC,QAAQ,EAAEC,SAAS,EAAE,GAAGH;IAErC,MAAM,EAAEI,SAAS,EAAE,GAAGC,wBAAwB;QAC1C,GAAGL,MAAM;QACT,WAAWM;IACf;IAEA,MAAMC,iBAAiBJ,UAAU,OAAO,CAACK;IACzC,MAAMC,gBAAgBN,UAAU,OAAO,CAACO;IAExC,OAAO;QACH,WAAU,EAAEC,EAAE,EAAE;YACZ,OAAOP,UAAU,OAAMQ;gBACnB,MAAMC,QAAQ,MAAMZ,IAAI,YAAY,CAACW,OAAOD;gBAE5C,IAAI,CAACE,OACD,MAAM,IAAIC,MAAY,0BAA0B,oBAAoB;oBAChEH;gBACJ;gBAGJ,OAAOI,qBAAqBF;YAChC;QACJ;QACA,aAAYb,MAAM;YACd,OAAOI,UAAU,OAAMQ;gBACnB,MAAM,EAAEI,IAAI,EAAEC,KAAK,EAAE,GAAGjB;gBACxB,MAAMkB,YAAYhB,SAAS,WAAW,GAAG,EAAE;gBAE3C,MAAM,CAACiB,SAASC,KAAK,GAAG,MAAMnB,IAAI,iBAAiB,CAACW,OAAO;oBACvD,GAAGZ,MAAM;oBACT,MAAMS,cAAc,GAAG,CAAC;wBACpB,OAAOY,eAAeL;wBACtB,QAAQJ,MAAM,MAAM;oBACxB;oBACA,OAAOL,eAAe,GAAG,CAAC;wBACtB,OAAO;4BACH,GAAGU,KAAK;4BACRC;wBACJ;wBACA,QAAQN,MAAM,MAAM;oBACxB;gBACJ;gBAEA,OAAO;oBAACO,QAAQ,GAAG,CAACJ;oBAA+BK;iBAAK;YAC5D;QACJ;QACA,cAAa,EAAEE,IAAI,EAAE;YACjB,OAAOlB,UAAU,OAAMQ;gBACnB,MAAMC,QAAQ,MAAMZ,IAAI,WAAW,CAACW,OAAO;oBACvC,IAAIU,KAAK,EAAE;oBACX,QAAQA;gBACZ;gBACA,OAAOP,qBAAqBF;YAChC;QACJ;QACA,cAAa,EAAEF,EAAE,EAAEW,IAAI,EAAE;YACrB,OAAOlB,UAAU,OAAMQ;gBACnB,MAAMW,WAAW,MAAMtB,IAAI,YAAY,CAACW,OAAOD;gBAE/C,MAAMa,QAAQ;oBAKV,GAAGC,KAAKF,UAAUG,kBAAkB;oBACpC,QAAQ;wBACJ,GAAGH,SAAS,MAAM;wBAClB,GAAGD,IAAI;oBACX;gBACJ;gBAEA,MAAMT,QAAQ,MAAMZ,IAAI,WAAW,CAACW,OAAOW,SAAS,EAAE,EAAEC;gBACxD,OAAOT,qBAAqBF;YAChC;QACJ;QACA,cAAa,EAAEF,EAAE,EAAE;YACf,OAAOP,UAAU,OAAMQ;gBACnB,MAAMX,IAAI,WAAW,CAACW,OAAOD;gBAC7B,OAAO;YACX;QACJ;IACJ;AACJ"}