@webiny/api-aco 0.0.0-ee-vpcs.549378cf03 → 0.0.0-unstable.06b2ede40f

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 (509) hide show
  1. package/README.md +15 -0
  2. package/apps/AcoApp.d.ts +21 -0
  3. package/apps/AcoApp.js +143 -0
  4. package/apps/AcoApp.js.map +1 -0
  5. package/apps/AcoApps.d.ts +10 -0
  6. package/apps/AcoApps.js +75 -0
  7. package/apps/AcoApps.js.map +1 -0
  8. package/apps/app.gql.d.ts +3 -0
  9. package/apps/app.gql.js +59 -0
  10. package/apps/app.gql.js.map +1 -0
  11. package/apps/index.d.ts +2 -0
  12. package/apps/index.js +29 -0
  13. package/apps/index.js.map +1 -0
  14. package/constants.d.ts +3 -0
  15. package/constants.js +26 -0
  16. package/constants.js.map +1 -0
  17. package/createAcoContext.d.ts +9 -0
  18. package/createAcoContext.js +130 -0
  19. package/createAcoContext.js.map +1 -0
  20. package/createAcoGraphQL.d.ts +4 -0
  21. package/createAcoGraphQL.js +163 -0
  22. package/createAcoGraphQL.js.map +1 -0
  23. package/createAcoHooks.d.ts +2 -0
  24. package/createAcoHooks.js +19 -0
  25. package/createAcoHooks.js.map +1 -0
  26. package/createAcoModels.d.ts +2 -0
  27. package/createAcoModels.js +35 -0
  28. package/createAcoModels.js.map +1 -0
  29. package/createAcoStorageOperations.d.ts +11 -0
  30. package/createAcoStorageOperations.js +24 -0
  31. package/createAcoStorageOperations.js.map +1 -0
  32. package/createAcoTasks.d.ts +1 -0
  33. package/createAcoTasks.js +13 -0
  34. package/createAcoTasks.js.map +1 -0
  35. package/filter/filter.crud.d.ts +3 -0
  36. package/filter/filter.crud.js +94 -0
  37. package/filter/filter.crud.js.map +1 -0
  38. package/filter/filter.gql.d.ts +3 -0
  39. package/filter/filter.gql.js +152 -0
  40. package/filter/filter.gql.js.map +1 -0
  41. package/filter/filter.model.d.ts +2 -0
  42. package/filter/filter.model.js +124 -0
  43. package/filter/filter.model.js.map +1 -0
  44. package/filter/filter.so.d.ts +3 -0
  45. package/filter/filter.so.js +98 -0
  46. package/filter/filter.so.js.map +1 -0
  47. package/filter/filter.types.d.ts +95 -0
  48. package/filter/filter.types.js +13 -0
  49. package/filter/filter.types.js.map +1 -0
  50. package/flp/FolderLevelPermissions/gateways/GetIdentityGateway/GetIdentityGatewayFromContext.d.ts +7 -0
  51. package/flp/FolderLevelPermissions/gateways/GetIdentityGateway/GetIdentityGatewayFromContext.js +17 -0
  52. package/flp/FolderLevelPermissions/gateways/GetIdentityGateway/GetIdentityGatewayFromContext.js.map +1 -0
  53. package/flp/FolderLevelPermissions/gateways/GetIdentityGateway/IGetIdentityGateway.d.ts +4 -0
  54. package/flp/FolderLevelPermissions/gateways/GetIdentityGateway/IGetIdentityGateway.js +7 -0
  55. package/flp/FolderLevelPermissions/gateways/GetIdentityGateway/IGetIdentityGateway.js.map +1 -0
  56. package/flp/FolderLevelPermissions/gateways/GetIdentityGateway/index.d.ts +2 -0
  57. package/flp/FolderLevelPermissions/gateways/GetIdentityGateway/index.js +29 -0
  58. package/flp/FolderLevelPermissions/gateways/GetIdentityGateway/index.js.map +1 -0
  59. package/flp/FolderLevelPermissions/gateways/GetWcpGateway/GetWcpGatewayFromContext.d.ts +7 -0
  60. package/flp/FolderLevelPermissions/gateways/GetWcpGateway/GetWcpGatewayFromContext.js +17 -0
  61. package/flp/FolderLevelPermissions/gateways/GetWcpGateway/GetWcpGatewayFromContext.js.map +1 -0
  62. package/flp/FolderLevelPermissions/gateways/GetWcpGateway/IGetWcpGateway.d.ts +4 -0
  63. package/flp/FolderLevelPermissions/gateways/GetWcpGateway/IGetWcpGateway.js +7 -0
  64. package/flp/FolderLevelPermissions/gateways/GetWcpGateway/IGetWcpGateway.js.map +1 -0
  65. package/flp/FolderLevelPermissions/gateways/GetWcpGateway/index.d.ts +2 -0
  66. package/flp/FolderLevelPermissions/gateways/GetWcpGateway/index.js +29 -0
  67. package/flp/FolderLevelPermissions/gateways/GetWcpGateway/index.js.map +1 -0
  68. package/flp/FolderLevelPermissions/gateways/IsAuthorizationEnabled/IIsAuthorizationEnabledGateway.d.ts +3 -0
  69. package/flp/FolderLevelPermissions/gateways/IsAuthorizationEnabled/IIsAuthorizationEnabledGateway.js +7 -0
  70. package/flp/FolderLevelPermissions/gateways/IsAuthorizationEnabled/IIsAuthorizationEnabledGateway.js.map +1 -0
  71. package/flp/FolderLevelPermissions/gateways/IsAuthorizationEnabled/IsAuthorizationEnabledGatewayFromContext.d.ts +7 -0
  72. package/flp/FolderLevelPermissions/gateways/IsAuthorizationEnabled/IsAuthorizationEnabledGatewayFromContext.js +17 -0
  73. package/flp/FolderLevelPermissions/gateways/IsAuthorizationEnabled/IsAuthorizationEnabledGatewayFromContext.js.map +1 -0
  74. package/flp/FolderLevelPermissions/gateways/IsAuthorizationEnabled/index.d.ts +2 -0
  75. package/flp/FolderLevelPermissions/gateways/IsAuthorizationEnabled/index.js +29 -0
  76. package/flp/FolderLevelPermissions/gateways/IsAuthorizationEnabled/index.js.map +1 -0
  77. package/flp/FolderLevelPermissions/gateways/ListIdentityTeamsGateway/IListIdentityTeamsGateway.d.ts +4 -0
  78. package/flp/FolderLevelPermissions/gateways/ListIdentityTeamsGateway/IListIdentityTeamsGateway.js +7 -0
  79. package/flp/FolderLevelPermissions/gateways/ListIdentityTeamsGateway/IListIdentityTeamsGateway.js.map +1 -0
  80. package/flp/FolderLevelPermissions/gateways/ListIdentityTeamsGateway/ListIdentityTeamsGatewayFromContext.d.ts +7 -0
  81. package/flp/FolderLevelPermissions/gateways/ListIdentityTeamsGateway/ListIdentityTeamsGatewayFromContext.js +39 -0
  82. package/flp/FolderLevelPermissions/gateways/ListIdentityTeamsGateway/ListIdentityTeamsGatewayFromContext.js.map +1 -0
  83. package/flp/FolderLevelPermissions/gateways/ListIdentityTeamsGateway/index.d.ts +2 -0
  84. package/flp/FolderLevelPermissions/gateways/ListIdentityTeamsGateway/index.js +29 -0
  85. package/flp/FolderLevelPermissions/gateways/ListIdentityTeamsGateway/index.js.map +1 -0
  86. package/flp/FolderLevelPermissions/gateways/ListPermissionsGateway/IListPermissionsGateway.d.ts +4 -0
  87. package/flp/FolderLevelPermissions/gateways/ListPermissionsGateway/IListPermissionsGateway.js +7 -0
  88. package/flp/FolderLevelPermissions/gateways/ListPermissionsGateway/IListPermissionsGateway.js.map +1 -0
  89. package/flp/FolderLevelPermissions/gateways/ListPermissionsGateway/ListPermissionsGatewayFromContext.d.ts +7 -0
  90. package/flp/FolderLevelPermissions/gateways/ListPermissionsGateway/ListPermissionsGatewayFromContext.js +17 -0
  91. package/flp/FolderLevelPermissions/gateways/ListPermissionsGateway/ListPermissionsGatewayFromContext.js.map +1 -0
  92. package/flp/FolderLevelPermissions/gateways/ListPermissionsGateway/index.d.ts +2 -0
  93. package/flp/FolderLevelPermissions/gateways/ListPermissionsGateway/index.js +29 -0
  94. package/flp/FolderLevelPermissions/gateways/ListPermissionsGateway/index.js.map +1 -0
  95. package/flp/FolderLevelPermissions/gateways/index.d.ts +5 -0
  96. package/flp/FolderLevelPermissions/gateways/index.js +62 -0
  97. package/flp/FolderLevelPermissions/gateways/index.js.map +1 -0
  98. package/flp/FolderLevelPermissions/index.d.ts +33 -0
  99. package/flp/FolderLevelPermissions/index.js +116 -0
  100. package/flp/FolderLevelPermissions/index.js.map +1 -0
  101. package/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.d.ts +7 -0
  102. package/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.js +48 -0
  103. package/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.js.map +1 -0
  104. package/flp/FolderLevelPermissions/useCases/CanAccessFolder/ICanAccessFolder.d.ts +9 -0
  105. package/flp/FolderLevelPermissions/useCases/CanAccessFolder/ICanAccessFolder.js +7 -0
  106. package/flp/FolderLevelPermissions/useCases/CanAccessFolder/ICanAccessFolder.js.map +1 -0
  107. package/flp/FolderLevelPermissions/useCases/CanAccessFolder/index.d.ts +2 -0
  108. package/flp/FolderLevelPermissions/useCases/CanAccessFolder/index.js +29 -0
  109. package/flp/FolderLevelPermissions/useCases/CanAccessFolder/index.js.map +1 -0
  110. package/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.d.ts +7 -0
  111. package/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.js +41 -0
  112. package/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.js.map +1 -0
  113. package/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/ICanAccessFolderContent.d.ts +8 -0
  114. package/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/ICanAccessFolderContent.js +7 -0
  115. package/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/ICanAccessFolderContent.js.map +1 -0
  116. package/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/index.d.ts +2 -0
  117. package/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/index.js +29 -0
  118. package/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/index.js.map +1 -0
  119. package/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.d.ts +4 -0
  120. package/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.js +14 -0
  121. package/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.js.map +1 -0
  122. package/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/ICanCreateFolderInRoot.d.ts +3 -0
  123. package/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/ICanCreateFolderInRoot.js +7 -0
  124. package/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/ICanCreateFolderInRoot.js.map +1 -0
  125. package/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/index.d.ts +2 -0
  126. package/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/index.js +29 -0
  127. package/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/index.js.map +1 -0
  128. package/flp/FolderLevelPermissions/useCases/CanUseFolderLevelPermissions/CanUseFolderLevelPermissions.d.ts +9 -0
  129. package/flp/FolderLevelPermissions/useCases/CanUseFolderLevelPermissions/CanUseFolderLevelPermissions.js +34 -0
  130. package/flp/FolderLevelPermissions/useCases/CanUseFolderLevelPermissions/CanUseFolderLevelPermissions.js.map +1 -0
  131. package/flp/FolderLevelPermissions/useCases/CanUseFolderLevelPermissions/ICanUseFolderPermissions.d.ts +3 -0
  132. package/flp/FolderLevelPermissions/useCases/CanUseFolderLevelPermissions/ICanUseFolderPermissions.js +7 -0
  133. package/flp/FolderLevelPermissions/useCases/CanUseFolderLevelPermissions/ICanUseFolderPermissions.js.map +1 -0
  134. package/flp/FolderLevelPermissions/useCases/CanUseFolderLevelPermissions/index.d.ts +2 -0
  135. package/flp/FolderLevelPermissions/useCases/CanUseFolderLevelPermissions/index.js +29 -0
  136. package/flp/FolderLevelPermissions/useCases/CanUseFolderLevelPermissions/index.js.map +1 -0
  137. package/flp/FolderLevelPermissions/useCases/CanUseTeams/CanUseTeams.d.ts +7 -0
  138. package/flp/FolderLevelPermissions/useCases/CanUseTeams/CanUseTeams.js +17 -0
  139. package/flp/FolderLevelPermissions/useCases/CanUseTeams/CanUseTeams.js.map +1 -0
  140. package/flp/FolderLevelPermissions/useCases/CanUseTeams/ICanUseTeams.d.ts +3 -0
  141. package/flp/FolderLevelPermissions/useCases/CanUseTeams/ICanUseTeams.js +7 -0
  142. package/flp/FolderLevelPermissions/useCases/CanUseTeams/ICanUseTeams.js.map +1 -0
  143. package/flp/FolderLevelPermissions/useCases/CanUseTeams/index.d.ts +2 -0
  144. package/flp/FolderLevelPermissions/useCases/CanUseTeams/index.js +29 -0
  145. package/flp/FolderLevelPermissions/useCases/CanUseTeams/index.js.map +1 -0
  146. package/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.d.ts +5 -0
  147. package/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.js +14 -0
  148. package/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.js.map +1 -0
  149. package/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/ICheckNotInheritedPermissions.d.ts +4 -0
  150. package/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/ICheckNotInheritedPermissions.js +7 -0
  151. package/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/ICheckNotInheritedPermissions.js.map +1 -0
  152. package/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/index.d.ts +2 -0
  153. package/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/index.js +29 -0
  154. package/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/index.js.map +1 -0
  155. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.d.ts +6 -0
  156. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.js +77 -0
  157. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.js.map +1 -0
  158. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.d.ts +9 -0
  159. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.js +21 -0
  160. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.js.map +1 -0
  161. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.d.ts +10 -0
  162. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.js +42 -0
  163. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.js.map +1 -0
  164. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/IGetDefaultPermissions.d.ts +4 -0
  165. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/IGetDefaultPermissions.js +7 -0
  166. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/IGetDefaultPermissions.js.map +1 -0
  167. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/index.d.ts +3 -0
  168. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/index.js +40 -0
  169. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/index.js.map +1 -0
  170. package/flp/FolderLevelPermissions/useCases/GetFolderPermission/GetFolderPermission.d.ts +7 -0
  171. package/flp/FolderLevelPermissions/useCases/GetFolderPermission/GetFolderPermission.js +17 -0
  172. package/flp/FolderLevelPermissions/useCases/GetFolderPermission/GetFolderPermission.js.map +1 -0
  173. package/flp/FolderLevelPermissions/useCases/GetFolderPermission/IGetFolderPermission.d.ts +4 -0
  174. package/flp/FolderLevelPermissions/useCases/GetFolderPermission/IGetFolderPermission.js +7 -0
  175. package/flp/FolderLevelPermissions/useCases/GetFolderPermission/IGetFolderPermission.js.map +1 -0
  176. package/flp/FolderLevelPermissions/useCases/GetFolderPermission/index.d.ts +2 -0
  177. package/flp/FolderLevelPermissions/useCases/GetFolderPermission/index.js +29 -0
  178. package/flp/FolderLevelPermissions/useCases/GetFolderPermission/index.js.map +1 -0
  179. package/flp/FolderLevelPermissions/useCases/ListFolderPermissions/IListFolderPermissions.d.ts +4 -0
  180. package/flp/FolderLevelPermissions/useCases/ListFolderPermissions/IListFolderPermissions.js +7 -0
  181. package/flp/FolderLevelPermissions/useCases/ListFolderPermissions/IListFolderPermissions.js.map +1 -0
  182. package/flp/FolderLevelPermissions/useCases/ListFolderPermissions/ListFolderPermissions.d.ts +7 -0
  183. package/flp/FolderLevelPermissions/useCases/ListFolderPermissions/ListFolderPermissions.js +17 -0
  184. package/flp/FolderLevelPermissions/useCases/ListFolderPermissions/ListFolderPermissions.js.map +1 -0
  185. package/flp/FolderLevelPermissions/useCases/ListFolderPermissions/index.d.ts +2 -0
  186. package/flp/FolderLevelPermissions/useCases/ListFolderPermissions/index.js +18 -0
  187. package/flp/FolderLevelPermissions/useCases/ListFolderPermissions/index.js.map +1 -0
  188. package/flp/FolderLevelPermissions/useCases/index.d.ts +9 -0
  189. package/flp/FolderLevelPermissions/useCases/index.js +106 -0
  190. package/flp/FolderLevelPermissions/useCases/index.js.map +1 -0
  191. package/flp/flp.crud.d.ts +9 -0
  192. package/flp/flp.crud.js +172 -0
  193. package/flp/flp.crud.js.map +1 -0
  194. package/flp/flp.so.d.ts +26 -0
  195. package/flp/flp.so.js +304 -0
  196. package/flp/flp.so.js.map +1 -0
  197. package/flp/flp.types.d.ts +147 -0
  198. package/flp/flp.types.js +18 -0
  199. package/flp/flp.types.js.map +1 -0
  200. package/flp/hooks/index.d.ts +2 -0
  201. package/flp/hooks/index.js +17 -0
  202. package/flp/hooks/index.js.map +1 -0
  203. package/flp/hooks/onFolderAfterCreateFlp.hook.d.ts +2 -0
  204. package/flp/hooks/onFolderAfterCreateFlp.hook.js +37 -0
  205. package/flp/hooks/onFolderAfterCreateFlp.hook.js.map +1 -0
  206. package/flp/hooks/onFolderAfterDeleteFlp.hook.d.ts +2 -0
  207. package/flp/hooks/onFolderAfterDeleteFlp.hook.js +37 -0
  208. package/flp/hooks/onFolderAfterDeleteFlp.hook.js.map +1 -0
  209. package/flp/hooks/onFolderAfterUpdateFlp.hook.d.ts +2 -0
  210. package/flp/hooks/onFolderAfterUpdateFlp.hook.js +39 -0
  211. package/flp/hooks/onFolderAfterUpdateFlp.hook.js.map +1 -0
  212. package/flp/index.d.ts +5 -0
  213. package/flp/index.js +62 -0
  214. package/flp/index.js.map +1 -0
  215. package/flp/tasks/createFlp.task.d.ts +2 -0
  216. package/flp/tasks/createFlp.task.js +49 -0
  217. package/flp/tasks/createFlp.task.js.map +1 -0
  218. package/flp/tasks/deleteFlp.task.d.ts +2 -0
  219. package/flp/tasks/deleteFlp.task.js +49 -0
  220. package/flp/tasks/deleteFlp.task.js.map +1 -0
  221. package/flp/tasks/index.d.ts +5 -0
  222. package/flp/tasks/index.js +20 -0
  223. package/flp/tasks/index.js.map +1 -0
  224. package/flp/tasks/syncFlp.task.d.ts +2 -0
  225. package/flp/tasks/syncFlp.task.js +126 -0
  226. package/flp/tasks/syncFlp.task.js.map +1 -0
  227. package/flp/tasks/updateFlp.task.d.ts +2 -0
  228. package/flp/tasks/updateFlp.task.js +55 -0
  229. package/flp/tasks/updateFlp.task.js.map +1 -0
  230. package/flp/useCases/CreateFlp.d.ts +7 -0
  231. package/flp/useCases/CreateFlp.js +51 -0
  232. package/flp/useCases/CreateFlp.js.map +1 -0
  233. package/flp/useCases/DeleteFlp.d.ts +6 -0
  234. package/flp/useCases/DeleteFlp.js +30 -0
  235. package/flp/useCases/DeleteFlp.js.map +1 -0
  236. package/flp/useCases/UpdateFlp.d.ts +26 -0
  237. package/flp/useCases/UpdateFlp.js +198 -0
  238. package/flp/useCases/UpdateFlp.js.map +1 -0
  239. package/flp/useCases/index.d.ts +3 -0
  240. package/flp/useCases/index.js +40 -0
  241. package/flp/useCases/index.js.map +1 -0
  242. package/folder/createFolderModelModifier.d.ts +36 -0
  243. package/folder/createFolderModelModifier.js +70 -0
  244. package/folder/createFolderModelModifier.js.map +1 -0
  245. package/folder/createFolderTypeDefs.d.ts +7 -0
  246. package/folder/createFolderTypeDefs.js +207 -0
  247. package/folder/createFolderTypeDefs.js.map +1 -0
  248. package/folder/ensureFolderIsEmpty.d.ts +8 -0
  249. package/folder/ensureFolderIsEmpty.js +63 -0
  250. package/folder/ensureFolderIsEmpty.js.map +1 -0
  251. package/folder/folder.crud.d.ts +8 -0
  252. package/folder/folder.crud.js +157 -0
  253. package/folder/folder.crud.js.map +1 -0
  254. package/folder/folder.gql.d.ts +4 -0
  255. package/folder/folder.gql.js +135 -0
  256. package/folder/folder.gql.js.map +1 -0
  257. package/folder/folder.model.d.ts +2 -0
  258. package/folder/folder.model.js +126 -0
  259. package/folder/folder.model.js.map +1 -0
  260. package/folder/folder.so.d.ts +3 -0
  261. package/folder/folder.so.js +197 -0
  262. package/folder/folder.so.js.map +1 -0
  263. package/folder/folder.types.d.ts +148 -0
  264. package/folder/folder.types.js +7 -0
  265. package/folder/folder.types.js.map +1 -0
  266. package/folder/onFolderBeforeDeleteAco.hook.d.ts +2 -0
  267. package/folder/onFolderBeforeDeleteAco.hook.js +54 -0
  268. package/folder/onFolderBeforeDeleteAco.hook.js.map +1 -0
  269. package/folder/onFolderBeforeDeleteFm.hook.d.ts +2 -0
  270. package/folder/onFolderBeforeDeleteFm.hook.js +51 -0
  271. package/folder/onFolderBeforeDeleteFm.hook.js.map +1 -0
  272. package/folder/onFolderBeforeDeleteHcms.hook.d.ts +2 -0
  273. package/folder/onFolderBeforeDeleteHcms.hook.js +58 -0
  274. package/folder/onFolderBeforeDeleteHcms.hook.js.map +1 -0
  275. package/folder/useCases/CreateFolder/CreateFolder.d.ts +7 -0
  276. package/folder/useCases/CreateFolder/CreateFolder.js +19 -0
  277. package/folder/useCases/CreateFolder/CreateFolder.js.map +1 -0
  278. package/folder/useCases/CreateFolder/CreateFolderWithEvents.d.ts +9 -0
  279. package/folder/useCases/CreateFolder/CreateFolderWithEvents.js +25 -0
  280. package/folder/useCases/CreateFolder/CreateFolderWithEvents.js.map +1 -0
  281. package/folder/useCases/CreateFolder/CreateFolderWithFolderLevelPermissions.d.ts +25 -0
  282. package/folder/useCases/CreateFolder/CreateFolderWithFolderLevelPermissions.js +39 -0
  283. package/folder/useCases/CreateFolder/CreateFolderWithFolderLevelPermissions.js.map +1 -0
  284. package/folder/useCases/CreateFolder/ICreateFolder.d.ts +4 -0
  285. package/folder/useCases/CreateFolder/ICreateFolder.js +7 -0
  286. package/folder/useCases/CreateFolder/ICreateFolder.js.map +1 -0
  287. package/folder/useCases/CreateFolder/index.d.ts +17 -0
  288. package/folder/useCases/CreateFolder/index.js +20 -0
  289. package/folder/useCases/CreateFolder/index.js.map +1 -0
  290. package/folder/useCases/DeleteFolder/DeleteFolder.d.ts +7 -0
  291. package/folder/useCases/DeleteFolder/DeleteFolder.js +18 -0
  292. package/folder/useCases/DeleteFolder/DeleteFolder.js.map +1 -0
  293. package/folder/useCases/DeleteFolder/DeleteFolderWithEvents.d.ts +10 -0
  294. package/folder/useCases/DeleteFolder/DeleteFolderWithEvents.js +29 -0
  295. package/folder/useCases/DeleteFolder/DeleteFolderWithEvents.js.map +1 -0
  296. package/folder/useCases/DeleteFolder/DeleteFolderWithFolderLevelPermissions.d.ts +9 -0
  297. package/folder/useCases/DeleteFolder/DeleteFolderWithFolderLevelPermissions.js +24 -0
  298. package/folder/useCases/DeleteFolder/DeleteFolderWithFolderLevelPermissions.js.map +1 -0
  299. package/folder/useCases/DeleteFolder/IDeleteFolder.d.ts +4 -0
  300. package/folder/useCases/DeleteFolder/IDeleteFolder.js +7 -0
  301. package/folder/useCases/DeleteFolder/IDeleteFolder.js.map +1 -0
  302. package/folder/useCases/DeleteFolder/index.d.ts +18 -0
  303. package/folder/useCases/DeleteFolder/index.js +20 -0
  304. package/folder/useCases/DeleteFolder/index.js.map +1 -0
  305. package/folder/useCases/GetAncestors/GetAncestors.d.ts +9 -0
  306. package/folder/useCases/GetAncestors/GetAncestors.js +77 -0
  307. package/folder/useCases/GetAncestors/GetAncestors.js.map +1 -0
  308. package/folder/useCases/GetAncestors/IGetAncestors.d.ts +7 -0
  309. package/folder/useCases/GetAncestors/IGetAncestors.js +7 -0
  310. package/folder/useCases/GetAncestors/IGetAncestors.js.map +1 -0
  311. package/folder/useCases/GetAncestors/index.d.ts +9 -0
  312. package/folder/useCases/GetAncestors/index.js +16 -0
  313. package/folder/useCases/GetAncestors/index.js.map +1 -0
  314. package/folder/useCases/GetFolder/GetFolder.d.ts +7 -0
  315. package/folder/useCases/GetFolder/GetFolder.js +17 -0
  316. package/folder/useCases/GetFolder/GetFolder.js.map +1 -0
  317. package/folder/useCases/GetFolder/GetFolderWithFolderLevelPermissions.d.ts +25 -0
  318. package/folder/useCases/GetFolder/GetFolderWithFolderLevelPermissions.js +33 -0
  319. package/folder/useCases/GetFolder/GetFolderWithFolderLevelPermissions.js.map +1 -0
  320. package/folder/useCases/GetFolder/IGetFolder.d.ts +4 -0
  321. package/folder/useCases/GetFolder/IGetFolder.js +7 -0
  322. package/folder/useCases/GetFolder/IGetFolder.js.map +1 -0
  323. package/folder/useCases/GetFolder/index.d.ts +13 -0
  324. package/folder/useCases/GetFolder/index.js +19 -0
  325. package/folder/useCases/GetFolder/index.js.map +1 -0
  326. package/folder/useCases/GetFolderHierarchy/GetFolderHierarchy.d.ts +11 -0
  327. package/folder/useCases/GetFolderHierarchy/GetFolderHierarchy.js +63 -0
  328. package/folder/useCases/GetFolderHierarchy/GetFolderHierarchy.js.map +1 -0
  329. package/folder/useCases/GetFolderHierarchy/GetFolderHierarchyWithFolderLevelPermissions.d.ts +17 -0
  330. package/folder/useCases/GetFolderHierarchy/GetFolderHierarchyWithFolderLevelPermissions.js +59 -0
  331. package/folder/useCases/GetFolderHierarchy/GetFolderHierarchyWithFolderLevelPermissions.js.map +1 -0
  332. package/folder/useCases/GetFolderHierarchy/IGetFolderHierarchy.d.ts +4 -0
  333. package/folder/useCases/GetFolderHierarchy/IGetFolderHierarchy.js +7 -0
  334. package/folder/useCases/GetFolderHierarchy/IGetFolderHierarchy.js.map +1 -0
  335. package/folder/useCases/GetFolderHierarchy/index.d.ts +12 -0
  336. package/folder/useCases/GetFolderHierarchy/index.js +18 -0
  337. package/folder/useCases/GetFolderHierarchy/index.js.map +1 -0
  338. package/folder/useCases/ListFolderLevelPermissionsTargets/IListAdminUsersGateway.d.ts +4 -0
  339. package/folder/useCases/ListFolderLevelPermissionsTargets/IListAdminUsersGateway.js +7 -0
  340. package/folder/useCases/ListFolderLevelPermissionsTargets/IListAdminUsersGateway.js.map +1 -0
  341. package/folder/useCases/ListFolderLevelPermissionsTargets/IListFolderLevelPermissionsTargets.d.ts +4 -0
  342. package/folder/useCases/ListFolderLevelPermissionsTargets/IListFolderLevelPermissionsTargets.js +7 -0
  343. package/folder/useCases/ListFolderLevelPermissionsTargets/IListFolderLevelPermissionsTargets.js.map +1 -0
  344. package/folder/useCases/ListFolderLevelPermissionsTargets/IListTeamsGateway.d.ts +4 -0
  345. package/folder/useCases/ListFolderLevelPermissionsTargets/IListTeamsGateway.js +7 -0
  346. package/folder/useCases/ListFolderLevelPermissionsTargets/IListTeamsGateway.js.map +1 -0
  347. package/folder/useCases/ListFolderLevelPermissionsTargets/ListAdminUsersGatewayFromContext.d.ts +7 -0
  348. package/folder/useCases/ListFolderLevelPermissionsTargets/ListAdminUsersGatewayFromContext.js +23 -0
  349. package/folder/useCases/ListFolderLevelPermissionsTargets/ListAdminUsersGatewayFromContext.js.map +1 -0
  350. package/folder/useCases/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargets.d.ts +13 -0
  351. package/folder/useCases/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargets.js +60 -0
  352. package/folder/useCases/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargets.js.map +1 -0
  353. package/folder/useCases/ListFolderLevelPermissionsTargets/ListTeamsGatewayFromContext.d.ts +7 -0
  354. package/folder/useCases/ListFolderLevelPermissionsTargets/ListTeamsGatewayFromContext.js +22 -0
  355. package/folder/useCases/ListFolderLevelPermissionsTargets/ListTeamsGatewayFromContext.js.map +1 -0
  356. package/folder/useCases/ListFolderLevelPermissionsTargets/index.d.ts +9 -0
  357. package/folder/useCases/ListFolderLevelPermissionsTargets/index.js +20 -0
  358. package/folder/useCases/ListFolderLevelPermissionsTargets/index.js.map +1 -0
  359. package/folder/useCases/ListFolders/IListFolders.d.ts +5 -0
  360. package/folder/useCases/ListFolders/IListFolders.js +7 -0
  361. package/folder/useCases/ListFolders/IListFolders.js.map +1 -0
  362. package/folder/useCases/ListFolders/ListFolders.d.ts +8 -0
  363. package/folder/useCases/ListFolders/ListFolders.js +17 -0
  364. package/folder/useCases/ListFolders/ListFolders.js.map +1 -0
  365. package/folder/useCases/ListFolders/ListFoldersWithFolderLevelPermissions.d.ts +14 -0
  366. package/folder/useCases/ListFolders/ListFoldersWithFolderLevelPermissions.js +67 -0
  367. package/folder/useCases/ListFolders/ListFoldersWithFolderLevelPermissions.js.map +1 -0
  368. package/folder/useCases/ListFolders/index.d.ts +13 -0
  369. package/folder/useCases/ListFolders/index.js +19 -0
  370. package/folder/useCases/ListFolders/index.js.map +1 -0
  371. package/folder/useCases/UpdateFolder/IUpdateFolder.d.ts +4 -0
  372. package/folder/useCases/UpdateFolder/IUpdateFolder.js +7 -0
  373. package/folder/useCases/UpdateFolder/IUpdateFolder.js.map +1 -0
  374. package/folder/useCases/UpdateFolder/UpdateFolder.d.ts +7 -0
  375. package/folder/useCases/UpdateFolder/UpdateFolder.js +20 -0
  376. package/folder/useCases/UpdateFolder/UpdateFolder.js.map +1 -0
  377. package/folder/useCases/UpdateFolder/UpdateFolderWithEvents.d.ts +10 -0
  378. package/folder/useCases/UpdateFolder/UpdateFolderWithEvents.js +38 -0
  379. package/folder/useCases/UpdateFolder/UpdateFolderWithEvents.js.map +1 -0
  380. package/folder/useCases/UpdateFolder/UpdateFolderWithFolderLevelPermissions.d.ts +26 -0
  381. package/folder/useCases/UpdateFolder/UpdateFolderWithFolderLevelPermissions.js +78 -0
  382. package/folder/useCases/UpdateFolder/UpdateFolderWithFolderLevelPermissions.js.map +1 -0
  383. package/folder/useCases/UpdateFolder/index.d.ts +18 -0
  384. package/folder/useCases/UpdateFolder/index.js +20 -0
  385. package/folder/useCases/UpdateFolder/index.js.map +1 -0
  386. package/folder/useCases/index.d.ts +8 -0
  387. package/folder/useCases/index.js +95 -0
  388. package/folder/useCases/index.js.map +1 -0
  389. package/index.d.ts +11 -8
  390. package/index.js +69 -62
  391. package/index.js.map +1 -1
  392. package/package.json +37 -32
  393. package/plugins/AcoAppModifierPlugin.d.ts +43 -0
  394. package/plugins/AcoAppModifierPlugin.js +58 -0
  395. package/plugins/AcoAppModifierPlugin.js.map +1 -0
  396. package/plugins/AcoAppRegisterPlugin.d.ts +8 -0
  397. package/plugins/AcoAppRegisterPlugin.js +21 -0
  398. package/plugins/AcoAppRegisterPlugin.js.map +1 -0
  399. package/plugins/index.d.ts +2 -0
  400. package/plugins/index.js +29 -0
  401. package/plugins/index.js.map +1 -0
  402. package/record/graphql/createAppResolvers.d.ts +14 -0
  403. package/record/graphql/createAppResolvers.js +115 -0
  404. package/record/graphql/createAppResolvers.js.map +1 -0
  405. package/record/graphql/createAppSchema.d.ts +9 -0
  406. package/record/graphql/createAppSchema.js +146 -0
  407. package/record/graphql/createAppSchema.js.map +1 -0
  408. package/record/record.crud.d.ts +3 -0
  409. package/record/record.crud.js +128 -0
  410. package/record/record.crud.js.map +1 -0
  411. package/record/record.gql.d.ts +8 -0
  412. package/record/record.gql.js +43 -0
  413. package/record/record.gql.js.map +1 -0
  414. package/record/record.model.d.ts +8 -0
  415. package/record/record.model.js +91 -0
  416. package/record/record.model.js.map +1 -0
  417. package/record/record.so.d.ts +3 -0
  418. package/record/record.so.js +171 -0
  419. package/record/record.so.js.map +1 -0
  420. package/record/record.types.d.ts +144 -0
  421. package/record/record.types.js +7 -0
  422. package/record/record.types.js.map +1 -0
  423. package/types.d.ts +105 -207
  424. package/types.js +67 -1
  425. package/types.js.map +1 -1
  426. package/utils/FoldersCacheFactory.d.ts +10 -0
  427. package/utils/FoldersCacheFactory.js +31 -0
  428. package/utils/FoldersCacheFactory.js.map +1 -0
  429. package/utils/ListCache.d.ts +23 -0
  430. package/utils/ListCache.js +31 -0
  431. package/utils/ListCache.js.map +1 -0
  432. package/utils/ListFoldersRepository.d.ts +10 -0
  433. package/utils/ListFoldersRepository.js +35 -0
  434. package/utils/ListFoldersRepository.js.map +1 -0
  435. package/utils/Path.d.ts +3 -0
  436. package/utils/Path.js +18 -0
  437. package/utils/Path.js.map +1 -0
  438. package/utils/acoRecordId.d.ts +6 -0
  439. package/utils/acoRecordId.js +35 -0
  440. package/utils/acoRecordId.js.map +1 -0
  441. package/utils/compress.d.ts +4 -0
  442. package/utils/compress.js +19 -0
  443. package/utils/compress.js.map +1 -0
  444. package/utils/createListSort.d.ts +3 -0
  445. package/utils/createListSort.js +17 -0
  446. package/utils/createListSort.js.map +1 -0
  447. package/utils/createModelField.d.ts +5 -0
  448. package/utils/createModelField.js +39 -0
  449. package/utils/createModelField.js.map +1 -0
  450. package/utils/createOperationsWrapper.d.ts +9 -0
  451. package/utils/createOperationsWrapper.js +27 -0
  452. package/utils/createOperationsWrapper.js.map +1 -0
  453. package/utils/decorators/CmsEntriesCrudDecorators.d.ts +11 -0
  454. package/utils/decorators/CmsEntriesCrudDecorators.js +210 -0
  455. package/utils/decorators/CmsEntriesCrudDecorators.js.map +1 -0
  456. package/utils/decorators/FilterEntriesByFolderFactory.d.ts +7 -0
  457. package/utils/decorators/FilterEntriesByFolderFactory.js +30 -0
  458. package/utils/decorators/FilterEntriesByFolderFactory.js.map +1 -0
  459. package/utils/decorators/ListEntriesFactory.d.ts +16 -0
  460. package/utils/decorators/ListEntriesFactory.js +107 -0
  461. package/utils/decorators/ListEntriesFactory.js.map +1 -0
  462. package/utils/decorators/decorateIfModelAuthorizationEnabled.d.ts +23 -0
  463. package/utils/decorators/decorateIfModelAuthorizationEnabled.js +54 -0
  464. package/utils/decorators/decorateIfModelAuthorizationEnabled.js.map +1 -0
  465. package/utils/decorators/hasRootFolderId.d.ts +7 -0
  466. package/utils/decorators/hasRootFolderId.js +27 -0
  467. package/utils/decorators/hasRootFolderId.js.map +1 -0
  468. package/utils/decorators/isPageModel.d.ts +5 -0
  469. package/utils/decorators/isPageModel.js +20 -0
  470. package/utils/decorators/isPageModel.js.map +1 -0
  471. package/utils/ensureAuthentication.d.ts +2 -0
  472. package/utils/ensureAuthentication.js +16 -0
  473. package/utils/ensureAuthentication.js.map +1 -0
  474. package/utils/modelFactory.d.ts +13 -0
  475. package/utils/modelFactory.js +22 -0
  476. package/utils/modelFactory.js.map +1 -0
  477. package/utils/pickEntryFieldValues.d.ts +3 -0
  478. package/utils/pickEntryFieldValues.js +30 -0
  479. package/utils/pickEntryFieldValues.js.map +1 -0
  480. package/utils/resolve.d.ts +3 -0
  481. package/utils/resolve.js +26 -0
  482. package/utils/resolve.js.map +1 -0
  483. package/context/folders.d.ts +0 -2
  484. package/context/folders.js +0 -261
  485. package/context/folders.js.map +0 -1
  486. package/context/index.d.ts +0 -2
  487. package/context/index.js +0 -22
  488. package/context/index.js.map +0 -1
  489. package/context/links.d.ts +0 -2
  490. package/context/links.js +0 -270
  491. package/context/links.js.map +0 -1
  492. package/graphql/base.gql.d.ts +0 -3
  493. package/graphql/base.gql.js +0 -63
  494. package/graphql/base.gql.js.map +0 -1
  495. package/graphql/folders.gql.d.ts +0 -3
  496. package/graphql/folders.gql.js +0 -126
  497. package/graphql/folders.gql.js.map +0 -1
  498. package/graphql/index.d.ts +0 -1
  499. package/graphql/index.js +0 -15
  500. package/graphql/index.js.map +0 -1
  501. package/graphql/links.gql.d.ts +0 -3
  502. package/graphql/links.gql.js +0 -123
  503. package/graphql/links.gql.js.map +0 -1
  504. package/subscriptions/afterFolderDelete.d.ts +0 -3
  505. package/subscriptions/afterFolderDelete.js +0 -62
  506. package/subscriptions/afterFolderDelete.js.map +0 -1
  507. package/subscriptions/index.d.ts +0 -3
  508. package/subscriptions/index.js +0 -14
  509. package/subscriptions/index.js.map +0 -1
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createFolderOperations = void 0;
8
+ var _omit = _interopRequireDefault(require("lodash/omit"));
9
+ var _error = _interopRequireDefault(require("@webiny/error"));
10
+ var _folder = require("./folder.model");
11
+ var _createListSort = require("../utils/createListSort");
12
+ var _createOperationsWrapper = require("../utils/createOperationsWrapper");
13
+ var _pickEntryFieldValues = require("../utils/pickEntryFieldValues");
14
+ var _Path = require("../utils/Path");
15
+ var _constants = require("@webiny/api-headless-cms/constants");
16
+ const createFolderOperations = params => {
17
+ const {
18
+ cms
19
+ } = params;
20
+ const {
21
+ withModel
22
+ } = (0, _createOperationsWrapper.createOperationsWrapper)({
23
+ ...params,
24
+ modelName: _folder.FOLDER_MODEL_ID
25
+ });
26
+ const getFolder = ({
27
+ id,
28
+ slug,
29
+ type,
30
+ parentId
31
+ }) => {
32
+ return withModel(async model => {
33
+ let entry;
34
+ if (id) {
35
+ entry = await cms.getEntryById(model, id);
36
+ } else if (slug && type) {
37
+ entry = await cms.getEntry(model, {
38
+ where: {
39
+ slug,
40
+ type,
41
+ parentId,
42
+ latest: true
43
+ }
44
+ });
45
+ }
46
+ if (!entry) {
47
+ throw new _error.default("Could not load folder.", "GET_FOLDER_ERROR", {
48
+ id,
49
+ slug,
50
+ type,
51
+ parentId
52
+ });
53
+ }
54
+ return (0, _pickEntryFieldValues.pickEntryFieldValues)(entry);
55
+ });
56
+ };
57
+ const checkExistingFolder = ({
58
+ id,
59
+ params
60
+ }) => {
61
+ return withModel(async model => {
62
+ const {
63
+ type,
64
+ slug,
65
+ parentId
66
+ } = params;
67
+
68
+ // We don't need to perform any kind of authorization or checks here. We just need to check
69
+ // if the folder already exists in the database. Hence the direct storage operations access.
70
+ const listResult = await cms.storageOperations.entries.list(model, {
71
+ ...params,
72
+ where: {
73
+ // Folders always work with latest entries. We never publish them.
74
+ latest: true,
75
+ type,
76
+ slug,
77
+ parentId,
78
+ id_not: id
79
+ },
80
+ limit: 1
81
+ });
82
+ if (listResult?.items?.length > 0) {
83
+ throw new _error.default(`Folder with slug "${slug}" already exists at this level.`, "FOLDER_ALREADY_EXISTS", {
84
+ id,
85
+ params
86
+ });
87
+ }
88
+ return;
89
+ });
90
+ };
91
+ const createFolderPath = async ({
92
+ slug,
93
+ parentId
94
+ }) => {
95
+ let parentFolder = null;
96
+ if (parentId) {
97
+ parentFolder = await getFolder({
98
+ id: parentId
99
+ });
100
+ if (!parentFolder) {
101
+ throw new _error.default("Parent folder not found. Unable to create the folder `path`", "ERROR_CREATE_FOLDER_PATH_PARENT_FOLDER_NOT_FOUND");
102
+ }
103
+ }
104
+ return _Path.Path.create(slug, parentFolder?.path);
105
+ };
106
+ return {
107
+ getFolder,
108
+ listFolders(params) {
109
+ return withModel(async model => {
110
+ const {
111
+ sort,
112
+ where
113
+ } = params;
114
+ const listSort = sort || {
115
+ title: "ASC"
116
+ };
117
+ const [entries, meta] = await cms.listLatestEntries(model, {
118
+ ...params,
119
+ sort: (0, _createListSort.createListSort)(listSort),
120
+ where: {
121
+ ...(where || {})
122
+ }
123
+ });
124
+ return [entries.map(_pickEntryFieldValues.pickEntryFieldValues), meta];
125
+ });
126
+ },
127
+ createFolder({
128
+ data
129
+ }) {
130
+ return withModel(async model => {
131
+ await checkExistingFolder({
132
+ params: {
133
+ type: data.type,
134
+ slug: data.slug,
135
+ parentId: data.parentId
136
+ }
137
+ });
138
+ const entry = await cms.createEntry(model, {
139
+ ...data,
140
+ parentId: data.parentId || null,
141
+ path: await createFolderPath(data)
142
+ });
143
+ return (0, _pickEntryFieldValues.pickEntryFieldValues)(entry);
144
+ });
145
+ },
146
+ updateFolder({
147
+ id,
148
+ data
149
+ }) {
150
+ return withModel(async model => {
151
+ const {
152
+ slug,
153
+ parentId
154
+ } = data;
155
+ const original = await getFolder({
156
+ id
157
+ });
158
+ await checkExistingFolder({
159
+ id,
160
+ params: {
161
+ type: original.type,
162
+ slug: slug || original.slug,
163
+ parentId: parentId !== undefined ? parentId : original.parentId // parentId can be `null`
164
+ }
165
+ });
166
+ const input = {
167
+ /**
168
+ * We are omitting the standard entry meta fields:
169
+ * we don't want to override them with the ones coming from the `original` entry.
170
+ */
171
+ ...(0, _omit.default)(original, _constants.ENTRY_META_FIELDS),
172
+ ...data,
173
+ path: await createFolderPath({
174
+ slug: slug || original.slug,
175
+ parentId: parentId !== undefined ? parentId : original.parentId // parentId can be `null`
176
+ })
177
+ };
178
+ const entry = await cms.updateEntry(model, id, input);
179
+ return (0, _pickEntryFieldValues.pickEntryFieldValues)(entry);
180
+ });
181
+ },
182
+ deleteFolder({
183
+ id
184
+ }) {
185
+ return withModel(async model => {
186
+ await cms.deleteEntry(model, id, {
187
+ permanently: true,
188
+ force: true
189
+ });
190
+ return true;
191
+ });
192
+ }
193
+ };
194
+ };
195
+ exports.createFolderOperations = createFolderOperations;
196
+
197
+ //# sourceMappingURL=folder.so.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_omit","_interopRequireDefault","require","_error","_folder","_createListSort","_createOperationsWrapper","_pickEntryFieldValues","_Path","_constants","createFolderOperations","params","cms","withModel","createOperationsWrapper","modelName","FOLDER_MODEL_ID","getFolder","id","slug","type","parentId","model","entry","getEntryById","getEntry","where","latest","WebinyError","pickEntryFieldValues","checkExistingFolder","listResult","storageOperations","entries","list","id_not","limit","items","length","createFolderPath","parentFolder","Path","create","path","listFolders","sort","listSort","title","meta","listLatestEntries","createListSort","map","createFolder","data","createEntry","updateFolder","original","undefined","input","omit","ENTRY_META_FIELDS","updateEntry","deleteFolder","deleteEntry","permanently","force","exports"],"sources":["folder.so.ts"],"sourcesContent":["import omit from \"lodash/omit\";\nimport WebinyError from \"@webiny/error\";\nimport { FOLDER_MODEL_ID } from \"./folder.model\";\nimport type { CreateAcoStorageOperationsParams } from \"~/createAcoStorageOperations\";\nimport { createListSort } from \"~/utils/createListSort\";\nimport { createOperationsWrapper } from \"~/utils/createOperationsWrapper\";\nimport { pickEntryFieldValues } from \"~/utils/pickEntryFieldValues\";\nimport { Path } from \"~/utils/Path\";\nimport type { AcoFolderStorageOperations, Folder } from \"./folder.types\";\nimport { ENTRY_META_FIELDS } from \"@webiny/api-headless-cms/constants\";\nimport type { ListSort } from \"~/types\";\n\ninterface AcoCheckExistingFolderParams {\n params: {\n type: string;\n slug: string;\n parentId?: string | null;\n };\n id?: string;\n}\n\nexport const createFolderOperations = (\n params: CreateAcoStorageOperationsParams\n): AcoFolderStorageOperations => {\n const { cms } = params;\n\n const { withModel } = createOperationsWrapper({\n ...params,\n modelName: FOLDER_MODEL_ID\n });\n\n const getFolder: AcoFolderStorageOperations[\"getFolder\"] = ({ id, slug, type, parentId }) => {\n return withModel(async model => {\n let entry;\n\n if (id) {\n entry = await cms.getEntryById(model, id);\n } else if (slug && type) {\n entry = await cms.getEntry(model, {\n where: { slug, type, parentId, latest: true }\n });\n }\n\n if (!entry) {\n throw new WebinyError(\"Could not load folder.\", \"GET_FOLDER_ERROR\", {\n id,\n slug,\n type,\n parentId\n });\n }\n\n return pickEntryFieldValues(entry);\n });\n };\n\n const checkExistingFolder = ({ id, params }: AcoCheckExistingFolderParams) => {\n return withModel(async model => {\n const { type, slug, parentId } = params;\n\n // We don't need to perform any kind of authorization or checks here. We just need to check\n // if the folder already exists in the database. Hence the direct storage operations access.\n const listResult = await cms.storageOperations.entries.list(model, {\n ...params,\n where: {\n // Folders always work with latest entries. We never publish them.\n latest: true,\n type,\n slug,\n parentId,\n id_not: id\n },\n limit: 1\n });\n\n if (listResult?.items?.length > 0) {\n throw new WebinyError(\n `Folder with slug \"${slug}\" already exists at this level.`,\n \"FOLDER_ALREADY_EXISTS\",\n {\n id,\n params\n }\n );\n }\n\n return;\n });\n };\n\n const createFolderPath = async ({\n slug,\n parentId\n }: Pick<Folder, \"slug\" | \"parentId\">): Promise<string> => {\n let parentFolder: Folder | null = null;\n\n if (parentId) {\n parentFolder = await getFolder({ id: parentId });\n\n if (!parentFolder) {\n throw new WebinyError(\n \"Parent folder not found. Unable to create the folder `path`\",\n \"ERROR_CREATE_FOLDER_PATH_PARENT_FOLDER_NOT_FOUND\"\n );\n }\n }\n\n return Path.create(slug, parentFolder?.path);\n };\n\n return {\n getFolder,\n listFolders(params) {\n return withModel(async model => {\n const { sort, where } = params;\n\n const listSort =\n sort ||\n ({\n title: \"ASC\"\n } as unknown as ListSort);\n\n const [entries, meta] = await cms.listLatestEntries(model, {\n ...params,\n sort: createListSort(listSort),\n where: {\n ...(where || {})\n }\n });\n\n return [entries.map(pickEntryFieldValues<Folder>), meta];\n });\n },\n createFolder({ data }) {\n return withModel(async model => {\n await checkExistingFolder({\n params: {\n type: data.type,\n slug: data.slug,\n parentId: data.parentId\n }\n });\n\n const entry = await cms.createEntry(model, {\n ...data,\n parentId: data.parentId || null,\n path: await createFolderPath(data)\n });\n\n return pickEntryFieldValues(entry);\n });\n },\n updateFolder({ id, data }) {\n return withModel(async model => {\n const { slug, parentId } = data;\n\n const original = await getFolder({ id });\n\n await checkExistingFolder({\n id,\n params: {\n type: original.type,\n slug: slug || original.slug,\n parentId: parentId !== undefined ? parentId : original.parentId // parentId can be `null`\n }\n });\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 ...data,\n path: await createFolderPath({\n slug: slug || original.slug,\n parentId: parentId !== undefined ? parentId : original.parentId // parentId can be `null`\n })\n };\n\n const entry = await cms.updateEntry(model, id, input);\n return pickEntryFieldValues(entry);\n });\n },\n deleteFolder({ id }) {\n return withModel(async model => {\n await cms.deleteEntry(model, id, {\n permanently: true,\n force: true\n });\n return true;\n });\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,148 @@
1
+ import type { ListMeta, ListSort, User } from "../types";
2
+ import { type FolderPermission } from "../types";
3
+ import type { Topic } from "@webiny/pubsub/types";
4
+ export interface Folder {
5
+ id: string;
6
+ entryId: string;
7
+ createdOn: string;
8
+ modifiedOn: string | null;
9
+ savedOn: string;
10
+ createdBy: User;
11
+ modifiedBy: User | null;
12
+ savedBy: User;
13
+ title: string;
14
+ slug: string;
15
+ permissions?: FolderPermission[];
16
+ type: string;
17
+ parentId?: string | null;
18
+ path: string;
19
+ extensions?: Record<string, any>;
20
+ }
21
+ export interface ListFoldersWhere {
22
+ type: string;
23
+ id_not_in?: string[];
24
+ parentId?: string | null;
25
+ parentId_in?: string[];
26
+ slug?: string;
27
+ slug_not?: string;
28
+ slug_contains?: string;
29
+ slug_not_contains?: string;
30
+ slug_in?: string[];
31
+ slug_not_in?: string[];
32
+ slug_startsWith?: string;
33
+ slug_not_startsWith?: string;
34
+ path?: string;
35
+ path_not?: string;
36
+ path_contains?: string;
37
+ path_not_contains?: string;
38
+ path_in?: string[];
39
+ path_not_in?: string[];
40
+ path_startsWith?: string;
41
+ path_not_startsWith?: string;
42
+ }
43
+ export interface ListFoldersParams {
44
+ where: ListFoldersWhere;
45
+ sort?: ListSort;
46
+ limit?: number;
47
+ after?: string | null;
48
+ disablePermissions?: boolean;
49
+ }
50
+ export type ListAllFoldersParams = Omit<ListFoldersParams, "limit" | "after">;
51
+ export interface GetFolderHierarchyParams {
52
+ type: string;
53
+ id: string;
54
+ }
55
+ export interface GetFolderHierarchyResponse {
56
+ parents: Folder[];
57
+ siblings: Folder[];
58
+ }
59
+ export type CreateFolderParams = Pick<Folder, "title" | "slug" | "type" | "parentId">;
60
+ export interface UpdateFolderParams {
61
+ title?: string;
62
+ slug?: string;
63
+ permissions?: FolderPermission[];
64
+ parentId?: string;
65
+ }
66
+ export interface DeleteFolderParams {
67
+ id: string;
68
+ }
69
+ export interface FolderLevelPermissionsTarget<TMeta = Record<string, any>> {
70
+ id: string;
71
+ target: string;
72
+ name: string;
73
+ type: string;
74
+ meta: TMeta;
75
+ }
76
+ export interface FolderLevelPermissionsTargetListMeta {
77
+ totalCount: number;
78
+ }
79
+ export interface StorageOperationsGetFolderParams {
80
+ id?: string;
81
+ slug?: string;
82
+ type?: string;
83
+ parentId?: string | null;
84
+ }
85
+ export interface GetFolderParams {
86
+ id: string;
87
+ }
88
+ export type StorageOperationsListFoldersParams = ListFoldersParams;
89
+ export interface StorageOperationsCreateFolderParams {
90
+ data: CreateFolderParams;
91
+ }
92
+ export interface StorageOperationsUpdateFolderParams {
93
+ id: string;
94
+ data: UpdateFolderParams;
95
+ }
96
+ export type StorageOperationsDeleteFolderParams = DeleteFolderParams;
97
+ export interface OnFolderBeforeCreateTopicParams {
98
+ input: CreateFolderParams;
99
+ }
100
+ export interface OnFolderAfterCreateTopicParams {
101
+ folder: Folder;
102
+ }
103
+ export interface OnFolderBeforeUpdateTopicParams {
104
+ original: Folder;
105
+ input: Record<string, any>;
106
+ }
107
+ export interface OnFolderAfterUpdateTopicParams {
108
+ original: Folder;
109
+ folder: Folder;
110
+ input: Record<string, any>;
111
+ }
112
+ export interface OnFolderBeforeDeleteTopicParams {
113
+ folder: Folder;
114
+ }
115
+ export interface OnFolderAfterDeleteTopicParams {
116
+ folder: Folder;
117
+ }
118
+ export interface AcoFolderCrud {
119
+ get(id: string, disablePermissions?: boolean): Promise<Folder>;
120
+ list(params: ListFoldersParams): Promise<[Folder[], ListMeta]>;
121
+ listFolderLevelPermissionsTargets(): Promise<[
122
+ FolderLevelPermissionsTarget[],
123
+ FolderLevelPermissionsTargetListMeta
124
+ ]>;
125
+ listAll(params: ListAllFoldersParams): Promise<[Folder[], ListMeta]>;
126
+ create(data: CreateFolderParams): Promise<Folder>;
127
+ update(id: string, data: UpdateFolderParams): Promise<Folder>;
128
+ delete(id: string): Promise<boolean>;
129
+ getAncestors(folder: Folder): Promise<Folder[]>;
130
+ getFolderHierarchy(params: GetFolderHierarchyParams): Promise<GetFolderHierarchyResponse>;
131
+ /**
132
+ * @deprecated use `getAncestors` instead
133
+ */
134
+ getFolderWithAncestors(id: string): Promise<Folder[]>;
135
+ onFolderBeforeCreate: Topic<OnFolderBeforeCreateTopicParams>;
136
+ onFolderAfterCreate: Topic<OnFolderAfterCreateTopicParams>;
137
+ onFolderBeforeUpdate: Topic<OnFolderBeforeUpdateTopicParams>;
138
+ onFolderAfterUpdate: Topic<OnFolderAfterUpdateTopicParams>;
139
+ onFolderBeforeDelete: Topic<OnFolderBeforeDeleteTopicParams>;
140
+ onFolderAfterDelete: Topic<OnFolderAfterDeleteTopicParams>;
141
+ }
142
+ export interface AcoFolderStorageOperations {
143
+ getFolder(params: StorageOperationsGetFolderParams): Promise<Folder>;
144
+ listFolders(params: StorageOperationsListFoldersParams): Promise<[Folder[], ListMeta]>;
145
+ createFolder(params: StorageOperationsCreateFolderParams): Promise<Folder>;
146
+ updateFolder(params: StorageOperationsUpdateFolderParams): Promise<Folder>;
147
+ deleteFolder(params: StorageOperationsDeleteFolderParams): Promise<boolean>;
148
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ //# sourceMappingURL=folder.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["folder.types.ts"],"sourcesContent":["import type { ListMeta, ListSort, User } from \"~/types\";\nimport { type FolderPermission } from \"~/types\";\nimport type { Topic } from \"@webiny/pubsub/types\";\n\nexport interface Folder {\n id: string;\n entryId: string;\n createdOn: string;\n modifiedOn: string | null;\n savedOn: string;\n createdBy: User;\n modifiedBy: User | null;\n savedBy: User;\n title: string;\n slug: string;\n permissions?: FolderPermission[];\n type: string;\n parentId?: string | null;\n path: string;\n extensions?: Record<string, any>;\n}\n\nexport interface ListFoldersWhere {\n type: string;\n id_not_in?: string[];\n parentId?: string | null;\n parentId_in?: string[];\n slug?: string;\n slug_not?: string;\n slug_contains?: string;\n slug_not_contains?: string;\n slug_in?: string[];\n slug_not_in?: string[];\n slug_startsWith?: string;\n slug_not_startsWith?: string;\n path?: string;\n path_not?: string;\n path_contains?: string;\n path_not_contains?: string;\n path_in?: string[];\n path_not_in?: string[];\n path_startsWith?: string;\n path_not_startsWith?: string;\n}\n\nexport interface ListFoldersParams {\n where: ListFoldersWhere;\n sort?: ListSort;\n limit?: number;\n after?: string | null;\n disablePermissions?: boolean;\n}\n\nexport type ListAllFoldersParams = Omit<ListFoldersParams, \"limit\" | \"after\">;\n\nexport interface GetFolderHierarchyParams {\n type: string;\n id: string;\n}\n\nexport interface GetFolderHierarchyResponse {\n parents: Folder[];\n siblings: Folder[];\n}\n\nexport type CreateFolderParams = Pick<Folder, \"title\" | \"slug\" | \"type\" | \"parentId\">;\n\nexport interface UpdateFolderParams {\n title?: string;\n slug?: string;\n permissions?: FolderPermission[];\n parentId?: string;\n}\n\nexport interface DeleteFolderParams {\n id: string;\n}\n\nexport interface FolderLevelPermissionsTarget<TMeta = Record<string, any>> {\n id: string;\n target: string;\n name: string;\n type: string;\n meta: TMeta;\n}\n\nexport interface FolderLevelPermissionsTargetListMeta {\n totalCount: number;\n}\n\nexport interface StorageOperationsGetFolderParams {\n id?: string;\n slug?: string;\n type?: string;\n parentId?: string | null;\n}\n\nexport interface GetFolderParams {\n id: string;\n}\n\nexport type StorageOperationsListFoldersParams = ListFoldersParams;\n\nexport interface StorageOperationsCreateFolderParams {\n data: CreateFolderParams;\n}\n\nexport interface StorageOperationsUpdateFolderParams {\n id: string;\n data: UpdateFolderParams;\n}\n\nexport type StorageOperationsDeleteFolderParams = DeleteFolderParams;\n\nexport interface OnFolderBeforeCreateTopicParams {\n input: CreateFolderParams;\n}\n\nexport interface OnFolderAfterCreateTopicParams {\n folder: Folder;\n}\n\nexport interface OnFolderBeforeUpdateTopicParams {\n original: Folder;\n input: Record<string, any>;\n}\n\nexport interface OnFolderAfterUpdateTopicParams {\n original: Folder;\n folder: Folder;\n input: Record<string, any>;\n}\n\nexport interface OnFolderBeforeDeleteTopicParams {\n folder: Folder;\n}\n\nexport interface OnFolderAfterDeleteTopicParams {\n folder: Folder;\n}\n\nexport interface AcoFolderCrud {\n get(id: string, disablePermissions?: boolean): Promise<Folder>;\n\n list(params: ListFoldersParams): Promise<[Folder[], ListMeta]>;\n\n listFolderLevelPermissionsTargets(): Promise<\n [FolderLevelPermissionsTarget[], FolderLevelPermissionsTargetListMeta]\n >;\n\n listAll(params: ListAllFoldersParams): Promise<[Folder[], ListMeta]>;\n\n create(data: CreateFolderParams): Promise<Folder>;\n\n update(id: string, data: UpdateFolderParams): Promise<Folder>;\n\n delete(id: string): Promise<boolean>;\n\n getAncestors(folder: Folder): Promise<Folder[]>;\n\n getFolderHierarchy(params: GetFolderHierarchyParams): Promise<GetFolderHierarchyResponse>;\n\n /**\n * @deprecated use `getAncestors` instead\n */\n getFolderWithAncestors(id: string): Promise<Folder[]>;\n\n onFolderBeforeCreate: Topic<OnFolderBeforeCreateTopicParams>;\n onFolderAfterCreate: Topic<OnFolderAfterCreateTopicParams>;\n onFolderBeforeUpdate: Topic<OnFolderBeforeUpdateTopicParams>;\n onFolderAfterUpdate: Topic<OnFolderAfterUpdateTopicParams>;\n onFolderBeforeDelete: Topic<OnFolderBeforeDeleteTopicParams>;\n onFolderAfterDelete: Topic<OnFolderAfterDeleteTopicParams>;\n}\n\nexport interface AcoFolderStorageOperations {\n getFolder(params: StorageOperationsGetFolderParams): Promise<Folder>;\n\n listFolders(params: StorageOperationsListFoldersParams): Promise<[Folder[], ListMeta]>;\n\n createFolder(params: StorageOperationsCreateFolderParams): Promise<Folder>;\n\n updateFolder(params: StorageOperationsUpdateFolderParams): Promise<Folder>;\n\n deleteFolder(params: StorageOperationsDeleteFolderParams): Promise<boolean>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import type { AcoContext } from "../types";
2
+ export declare const onFolderBeforeDeleteAcoHook: (context: AcoContext) => void;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.onFolderBeforeDeleteAcoHook = void 0;
8
+ var _error = _interopRequireDefault(require("@webiny/error"));
9
+ var _ensureFolderIsEmpty = require("./ensureFolderIsEmpty");
10
+ const onFolderBeforeDeleteAcoHook = context => {
11
+ context.aco.folder.onFolderBeforeDelete.subscribe(async ({
12
+ folder
13
+ }) => {
14
+ try {
15
+ const {
16
+ id,
17
+ type
18
+ } = folder;
19
+ await (0, _ensureFolderIsEmpty.ensureFolderIsEmpty)({
20
+ context,
21
+ folder,
22
+ hasContentCallback: async () => {
23
+ const content = [];
24
+ try {
25
+ const app = context.aco.getApp(type);
26
+ if (app) {
27
+ const [acoSearchRecords] = await app.search.list({
28
+ where: {
29
+ type,
30
+ location: {
31
+ folderId: id
32
+ }
33
+ },
34
+ limit: 1
35
+ });
36
+ content.push(...acoSearchRecords);
37
+ }
38
+ } catch {
39
+ // Do nothing.
40
+ }
41
+ return content.length > 0;
42
+ }
43
+ });
44
+ } catch (error) {
45
+ throw _error.default.from(error, {
46
+ message: "Error while executing onFolderBeforeDeleteAcoHook hook.",
47
+ code: "ACO_BEFORE_FOLDER_DELETE_ACO_HOOK"
48
+ });
49
+ }
50
+ });
51
+ };
52
+ exports.onFolderBeforeDeleteAcoHook = onFolderBeforeDeleteAcoHook;
53
+
54
+ //# sourceMappingURL=onFolderBeforeDeleteAco.hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_ensureFolderIsEmpty","onFolderBeforeDeleteAcoHook","context","aco","folder","onFolderBeforeDelete","subscribe","id","type","ensureFolderIsEmpty","hasContentCallback","content","app","getApp","acoSearchRecords","search","list","where","location","folderId","limit","push","length","error","WebinyError","from","message","code","exports"],"sources":["onFolderBeforeDeleteAco.hook.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { AcoContext, SearchRecord } from \"~/types\";\nimport { ensureFolderIsEmpty } from \"~/folder/ensureFolderIsEmpty\";\n\nexport const onFolderBeforeDeleteAcoHook = (context: AcoContext) => {\n context.aco.folder.onFolderBeforeDelete.subscribe(async ({ folder }) => {\n try {\n const { id, type } = folder;\n\n await ensureFolderIsEmpty({\n context,\n folder,\n hasContentCallback: async () => {\n const content: SearchRecord[] = [];\n try {\n const app = context.aco.getApp(type);\n if (app) {\n const [acoSearchRecords] = await app.search.list({\n where: {\n type,\n location: {\n folderId: id\n }\n },\n limit: 1\n });\n content.push(...acoSearchRecords);\n }\n } catch {\n // Do nothing.\n }\n\n return content.length > 0;\n }\n });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while executing onFolderBeforeDeleteAcoHook hook.\",\n code: \"ACO_BEFORE_FOLDER_DELETE_ACO_HOOK\"\n });\n }\n });\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,oBAAA,GAAAD,OAAA;AAEO,MAAME,2BAA2B,GAAIC,OAAmB,IAAK;EAChEA,OAAO,CAACC,GAAG,CAACC,MAAM,CAACC,oBAAoB,CAACC,SAAS,CAAC,OAAO;IAAEF;EAAO,CAAC,KAAK;IACpE,IAAI;MACA,MAAM;QAAEG,EAAE;QAAEC;MAAK,CAAC,GAAGJ,MAAM;MAE3B,MAAM,IAAAK,wCAAmB,EAAC;QACtBP,OAAO;QACPE,MAAM;QACNM,kBAAkB,EAAE,MAAAA,CAAA,KAAY;UAC5B,MAAMC,OAAuB,GAAG,EAAE;UAClC,IAAI;YACA,MAAMC,GAAG,GAAGV,OAAO,CAACC,GAAG,CAACU,MAAM,CAACL,IAAI,CAAC;YACpC,IAAII,GAAG,EAAE;cACL,MAAM,CAACE,gBAAgB,CAAC,GAAG,MAAMF,GAAG,CAACG,MAAM,CAACC,IAAI,CAAC;gBAC7CC,KAAK,EAAE;kBACHT,IAAI;kBACJU,QAAQ,EAAE;oBACNC,QAAQ,EAAEZ;kBACd;gBACJ,CAAC;gBACDa,KAAK,EAAE;cACX,CAAC,CAAC;cACFT,OAAO,CAACU,IAAI,CAAC,GAAGP,gBAAgB,CAAC;YACrC;UACJ,CAAC,CAAC,MAAM;YACJ;UAAA;UAGJ,OAAOH,OAAO,CAACW,MAAM,GAAG,CAAC;QAC7B;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOC,KAAK,EAAE;MACZ,MAAMC,cAAW,CAACC,IAAI,CAACF,KAAK,EAAE;QAC1BG,OAAO,EAAE,yDAAyD;QAClEC,IAAI,EAAE;MACV,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;AACN,CAAC;AAACC,OAAA,CAAA3B,2BAAA,GAAAA,2BAAA","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import type { AcoContext } from "../types";
2
+ export declare const onFolderBeforeDeleteFmHook: (context: AcoContext) => void;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.onFolderBeforeDeleteFmHook = void 0;
8
+ var _error = _interopRequireDefault(require("@webiny/error"));
9
+ var _ensureFolderIsEmpty = require("./ensureFolderIsEmpty");
10
+ const onFolderBeforeDeleteFmHook = context => {
11
+ context.aco.folder.onFolderBeforeDelete.subscribe(async ({
12
+ folder
13
+ }) => {
14
+ try {
15
+ const {
16
+ id,
17
+ type
18
+ } = folder;
19
+
20
+ /**
21
+ * Exit if the folder type is not related to File Manager
22
+ */
23
+ if (type !== "FmFile") {
24
+ return;
25
+ }
26
+ await (0, _ensureFolderIsEmpty.ensureFolderIsEmpty)({
27
+ context,
28
+ folder,
29
+ hasContentCallback: async () => {
30
+ const [content] = await context.fileManager.listFiles({
31
+ where: {
32
+ location: {
33
+ folderId: id
34
+ }
35
+ },
36
+ limit: 1
37
+ });
38
+ return content.length > 0;
39
+ }
40
+ });
41
+ } catch (error) {
42
+ throw _error.default.from(error, {
43
+ message: "Error while executing onFolderBeforeDeleteFmHook hook.",
44
+ code: "ACO_BEFORE_FOLDER_DELETE_FILE_HOOK"
45
+ });
46
+ }
47
+ });
48
+ };
49
+ exports.onFolderBeforeDeleteFmHook = onFolderBeforeDeleteFmHook;
50
+
51
+ //# sourceMappingURL=onFolderBeforeDeleteFm.hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_ensureFolderIsEmpty","onFolderBeforeDeleteFmHook","context","aco","folder","onFolderBeforeDelete","subscribe","id","type","ensureFolderIsEmpty","hasContentCallback","content","fileManager","listFiles","where","location","folderId","limit","length","error","WebinyError","from","message","code","exports"],"sources":["onFolderBeforeDeleteFm.hook.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { AcoContext } from \"~/types\";\nimport { ensureFolderIsEmpty } from \"~/folder/ensureFolderIsEmpty\";\n\nexport const onFolderBeforeDeleteFmHook = (context: AcoContext) => {\n context.aco.folder.onFolderBeforeDelete.subscribe(async ({ folder }) => {\n try {\n const { id, type } = folder;\n\n /**\n * Exit if the folder type is not related to File Manager\n */\n if (type !== \"FmFile\") {\n return;\n }\n\n await ensureFolderIsEmpty({\n context,\n folder,\n hasContentCallback: async () => {\n const [content] = await context.fileManager.listFiles({\n where: {\n location: {\n folderId: id\n }\n },\n limit: 1\n });\n\n return content.length > 0;\n }\n });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while executing onFolderBeforeDeleteFmHook hook.\",\n code: \"ACO_BEFORE_FOLDER_DELETE_FILE_HOOK\"\n });\n }\n });\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,oBAAA,GAAAD,OAAA;AAEO,MAAME,0BAA0B,GAAIC,OAAmB,IAAK;EAC/DA,OAAO,CAACC,GAAG,CAACC,MAAM,CAACC,oBAAoB,CAACC,SAAS,CAAC,OAAO;IAAEF;EAAO,CAAC,KAAK;IACpE,IAAI;MACA,MAAM;QAAEG,EAAE;QAAEC;MAAK,CAAC,GAAGJ,MAAM;;MAE3B;AACZ;AACA;MACY,IAAII,IAAI,KAAK,QAAQ,EAAE;QACnB;MACJ;MAEA,MAAM,IAAAC,wCAAmB,EAAC;QACtBP,OAAO;QACPE,MAAM;QACNM,kBAAkB,EAAE,MAAAA,CAAA,KAAY;UAC5B,MAAM,CAACC,OAAO,CAAC,GAAG,MAAMT,OAAO,CAACU,WAAW,CAACC,SAAS,CAAC;YAClDC,KAAK,EAAE;cACHC,QAAQ,EAAE;gBACNC,QAAQ,EAAET;cACd;YACJ,CAAC;YACDU,KAAK,EAAE;UACX,CAAC,CAAC;UAEF,OAAON,OAAO,CAACO,MAAM,GAAG,CAAC;QAC7B;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOC,KAAK,EAAE;MACZ,MAAMC,cAAW,CAACC,IAAI,CAACF,KAAK,EAAE;QAC1BG,OAAO,EAAE,wDAAwD;QACjEC,IAAI,EAAE;MACV,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;AACN,CAAC;AAACC,OAAA,CAAAvB,0BAAA,GAAAA,0BAAA","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import type { AcoContext } from "../types";
2
+ export declare const onFolderBeforeDeleteHcmsHook: (context: AcoContext) => void;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.onFolderBeforeDeleteHcmsHook = void 0;
8
+ var _error = _interopRequireDefault(require("@webiny/error"));
9
+ var _ensureFolderIsEmpty = require("./ensureFolderIsEmpty");
10
+ const onFolderBeforeDeleteHcmsHook = context => {
11
+ context.aco.folder.onFolderBeforeDelete.subscribe(async ({
12
+ folder
13
+ }) => {
14
+ try {
15
+ const {
16
+ id,
17
+ type
18
+ } = folder;
19
+ const modelId = type.split(":")[1];
20
+ if (!modelId) {
21
+ return;
22
+ }
23
+ let model;
24
+ try {
25
+ model = await context.cms.getModel(modelId);
26
+ if (!model) {
27
+ return;
28
+ }
29
+ } catch {
30
+ return;
31
+ }
32
+ await (0, _ensureFolderIsEmpty.ensureFolderIsEmpty)({
33
+ context,
34
+ folder,
35
+ hasContentCallback: async () => {
36
+ const [content] = await context.cms.listEntries(model, {
37
+ where: {
38
+ latest: true,
39
+ wbyAco_location: {
40
+ folderId: id
41
+ }
42
+ },
43
+ limit: 1
44
+ });
45
+ return content.length > 0;
46
+ }
47
+ });
48
+ } catch (error) {
49
+ throw _error.default.from(error, {
50
+ message: "Error while executing onFolderBeforeDeleteHcmsHook hook.",
51
+ code: "ACO_BEFORE_FOLDER_DELETE_HCMS_HOOK"
52
+ });
53
+ }
54
+ });
55
+ };
56
+ exports.onFolderBeforeDeleteHcmsHook = onFolderBeforeDeleteHcmsHook;
57
+
58
+ //# sourceMappingURL=onFolderBeforeDeleteHcms.hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_ensureFolderIsEmpty","onFolderBeforeDeleteHcmsHook","context","aco","folder","onFolderBeforeDelete","subscribe","id","type","modelId","split","model","cms","getModel","ensureFolderIsEmpty","hasContentCallback","content","listEntries","where","latest","wbyAco_location","folderId","limit","length","error","WebinyError","from","message","code","exports"],"sources":["onFolderBeforeDeleteHcms.hook.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport type { AcoContext } from \"~/types\";\nimport { ensureFolderIsEmpty } from \"~/folder/ensureFolderIsEmpty\";\n\nexport const onFolderBeforeDeleteHcmsHook = (context: AcoContext) => {\n context.aco.folder.onFolderBeforeDelete.subscribe(async ({ folder }) => {\n try {\n const { id, type } = folder;\n\n const modelId = type.split(\":\")[1];\n if (!modelId) {\n return;\n }\n\n let model: CmsModel;\n try {\n model = await context.cms.getModel(modelId);\n if (!model) {\n return;\n }\n } catch {\n return;\n }\n\n await ensureFolderIsEmpty({\n context,\n folder,\n hasContentCallback: async () => {\n const [content] = await context.cms.listEntries(model!, {\n where: {\n latest: true,\n wbyAco_location: {\n folderId: id\n }\n },\n limit: 1\n });\n return content.length > 0;\n }\n });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while executing onFolderBeforeDeleteHcmsHook hook.\",\n code: \"ACO_BEFORE_FOLDER_DELETE_HCMS_HOOK\"\n });\n }\n });\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,oBAAA,GAAAD,OAAA;AAEO,MAAME,4BAA4B,GAAIC,OAAmB,IAAK;EACjEA,OAAO,CAACC,GAAG,CAACC,MAAM,CAACC,oBAAoB,CAACC,SAAS,CAAC,OAAO;IAAEF;EAAO,CAAC,KAAK;IACpE,IAAI;MACA,MAAM;QAAEG,EAAE;QAAEC;MAAK,CAAC,GAAGJ,MAAM;MAE3B,MAAMK,OAAO,GAAGD,IAAI,CAACE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MAClC,IAAI,CAACD,OAAO,EAAE;QACV;MACJ;MAEA,IAAIE,KAAe;MACnB,IAAI;QACAA,KAAK,GAAG,MAAMT,OAAO,CAACU,GAAG,CAACC,QAAQ,CAACJ,OAAO,CAAC;QAC3C,IAAI,CAACE,KAAK,EAAE;UACR;QACJ;MACJ,CAAC,CAAC,MAAM;QACJ;MACJ;MAEA,MAAM,IAAAG,wCAAmB,EAAC;QACtBZ,OAAO;QACPE,MAAM;QACNW,kBAAkB,EAAE,MAAAA,CAAA,KAAY;UAC5B,MAAM,CAACC,OAAO,CAAC,GAAG,MAAMd,OAAO,CAACU,GAAG,CAACK,WAAW,CAACN,KAAK,EAAG;YACpDO,KAAK,EAAE;cACHC,MAAM,EAAE,IAAI;cACZC,eAAe,EAAE;gBACbC,QAAQ,EAAEd;cACd;YACJ,CAAC;YACDe,KAAK,EAAE;UACX,CAAC,CAAC;UACF,OAAON,OAAO,CAACO,MAAM,GAAG,CAAC;QAC7B;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOC,KAAK,EAAE;MACZ,MAAMC,cAAW,CAACC,IAAI,CAACF,KAAK,EAAE;QAC1BG,OAAO,EAAE,0DAA0D;QACnEC,IAAI,EAAE;MACV,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;AACN,CAAC;AAACC,OAAA,CAAA5B,4BAAA,GAAAA,4BAAA","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import type { ICreateFolder } from "./ICreateFolder";
2
+ import type { AcoFolderStorageOperations, CreateFolderParams } from "../../folder.types";
3
+ export declare class CreateFolder implements ICreateFolder {
4
+ private readonly createOperation;
5
+ constructor(createOperation: AcoFolderStorageOperations["createFolder"]);
6
+ execute(params: CreateFolderParams): Promise<import("../../folder.types").Folder>;
7
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CreateFolder = void 0;
7
+ class CreateFolder {
8
+ constructor(createOperation) {
9
+ this.createOperation = createOperation;
10
+ }
11
+ async execute(params) {
12
+ return await this.createOperation({
13
+ data: params
14
+ });
15
+ }
16
+ }
17
+ exports.CreateFolder = CreateFolder;
18
+
19
+ //# sourceMappingURL=CreateFolder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CreateFolder","constructor","createOperation","execute","params","data","exports"],"sources":["CreateFolder.ts"],"sourcesContent":["import type { ICreateFolder } from \"./ICreateFolder\";\nimport type { AcoFolderStorageOperations, CreateFolderParams } from \"~/folder/folder.types\";\n\nexport class CreateFolder implements ICreateFolder {\n private readonly createOperation: AcoFolderStorageOperations[\"createFolder\"];\n\n constructor(createOperation: AcoFolderStorageOperations[\"createFolder\"]) {\n this.createOperation = createOperation;\n }\n\n async execute(params: CreateFolderParams) {\n return await this.createOperation({ data: params });\n }\n}\n"],"mappings":";;;;;;AAGO,MAAMA,YAAY,CAA0B;EAG/CC,WAAWA,CAACC,eAA2D,EAAE;IACrE,IAAI,CAACA,eAAe,GAAGA,eAAe;EAC1C;EAEA,MAAMC,OAAOA,CAACC,MAA0B,EAAE;IACtC,OAAO,MAAM,IAAI,CAACF,eAAe,CAAC;MAAEG,IAAI,EAAED;IAAO,CAAC,CAAC;EACvD;AACJ;AAACE,OAAA,CAAAN,YAAA,GAAAA,YAAA","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ import type { ICreateFolder } from "./ICreateFolder";
2
+ import type { CreateFolderUseCasesTopics } from "./index";
3
+ import type { CreateFolderParams } from "../../folder.types";
4
+ export declare class CreateFolderWithEvents implements ICreateFolder {
5
+ private topics;
6
+ private readonly decoretee;
7
+ constructor(topics: CreateFolderUseCasesTopics, decoretee: ICreateFolder);
8
+ execute(params: CreateFolderParams): Promise<import("../../folder.types").Folder>;
9
+ }