@webiny/api-aco 5.43.3 → 6.0.0-alpha.1

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 (149) hide show
  1. package/apps/AcoApp.d.ts +2 -2
  2. package/apps/AcoApp.js.map +1 -1
  3. package/apps/AcoApps.d.ts +1 -1
  4. package/apps/AcoApps.js.map +1 -1
  5. package/apps/app.gql.d.ts +1 -1
  6. package/apps/app.gql.js.map +1 -1
  7. package/createAcoContext.d.ts +2 -2
  8. package/createAcoContext.js.map +1 -1
  9. package/createAcoGraphQL.d.ts +1 -1
  10. package/createAcoGraphQL.js.map +1 -1
  11. package/createAcoHooks.d.ts +1 -1
  12. package/createAcoHooks.js.map +1 -1
  13. package/createAcoModels.d.ts +1 -1
  14. package/createAcoModels.js.map +1 -1
  15. package/createAcoStorageOperations.d.ts +4 -4
  16. package/createAcoStorageOperations.js.map +1 -1
  17. package/filter/filter.crud.d.ts +2 -2
  18. package/filter/filter.crud.js.map +1 -1
  19. package/filter/filter.gql.d.ts +1 -1
  20. package/filter/filter.gql.js.map +1 -1
  21. package/filter/filter.model.js.map +1 -1
  22. package/filter/filter.so.d.ts +2 -2
  23. package/filter/filter.so.js.map +1 -1
  24. package/filter/filter.types.d.ts +2 -2
  25. package/filter/filter.types.js.map +1 -1
  26. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.d.ts +2 -2
  27. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.js.map +1 -1
  28. package/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.js.map +1 -1
  29. package/flp/flp.crud.d.ts +2 -2
  30. package/flp/flp.crud.js.map +1 -1
  31. package/flp/flp.so.d.ts +1 -1
  32. package/flp/flp.so.js.map +1 -1
  33. package/flp/flp.types.d.ts +2 -2
  34. package/flp/flp.types.js.map +1 -1
  35. package/flp/hooks/index.d.ts +1 -1
  36. package/flp/hooks/index.js.map +1 -1
  37. package/flp/hooks/onFolderAfterCreateFlp.hook.d.ts +1 -1
  38. package/flp/hooks/onFolderAfterCreateFlp.hook.js.map +1 -1
  39. package/flp/hooks/onFolderAfterDeleteFlp.hook.d.ts +1 -1
  40. package/flp/hooks/onFolderAfterDeleteFlp.hook.js.map +1 -1
  41. package/flp/hooks/onFolderAfterUpdateFlp.hook.d.ts +1 -1
  42. package/flp/hooks/onFolderAfterUpdateFlp.hook.js.map +1 -1
  43. package/folder/createFolderModelModifier.d.ts +2 -2
  44. package/folder/createFolderModelModifier.js.map +1 -1
  45. package/folder/createFolderTypeDefs.d.ts +1 -1
  46. package/folder/createFolderTypeDefs.js +8 -0
  47. package/folder/createFolderTypeDefs.js.map +1 -1
  48. package/folder/ensureFolderIsEmpty.d.ts +1 -1
  49. package/folder/ensureFolderIsEmpty.js.map +1 -1
  50. package/folder/folder.crud.d.ts +3 -2
  51. package/folder/folder.crud.js.map +1 -1
  52. package/folder/folder.gql.d.ts +2 -2
  53. package/folder/folder.gql.js.map +1 -1
  54. package/folder/folder.so.d.ts +2 -2
  55. package/folder/folder.so.js.map +1 -1
  56. package/folder/folder.types.d.ts +11 -2
  57. package/folder/folder.types.js.map +1 -1
  58. package/folder/onFolderBeforeDeleteAco.hook.d.ts +1 -1
  59. package/folder/onFolderBeforeDeleteAco.hook.js.map +1 -1
  60. package/folder/onFolderBeforeDeleteFm.hook.d.ts +1 -1
  61. package/folder/onFolderBeforeDeleteFm.hook.js.map +1 -1
  62. package/folder/onFolderBeforeDeleteHcms.hook.d.ts +1 -1
  63. package/folder/onFolderBeforeDeleteHcms.hook.js.map +1 -1
  64. package/folder/useCases/CreateFolder/CreateFolderWithFolderLevelPermissions.d.ts +1 -1
  65. package/folder/useCases/CreateFolder/CreateFolderWithFolderLevelPermissions.js.map +1 -1
  66. package/folder/useCases/CreateFolder/index.d.ts +2 -2
  67. package/folder/useCases/CreateFolder/index.js.map +1 -1
  68. package/folder/useCases/DeleteFolder/DeleteFolderWithFolderLevelPermissions.d.ts +1 -1
  69. package/folder/useCases/DeleteFolder/DeleteFolderWithFolderLevelPermissions.js.map +1 -1
  70. package/folder/useCases/DeleteFolder/index.d.ts +2 -2
  71. package/folder/useCases/DeleteFolder/index.js.map +1 -1
  72. package/folder/useCases/GetAncestors/IGetAncestors.d.ts +1 -1
  73. package/folder/useCases/GetAncestors/IGetAncestors.js.map +1 -1
  74. package/folder/useCases/GetFolder/GetFolderWithFolderLevelPermissions.d.ts +1 -1
  75. package/folder/useCases/GetFolder/GetFolderWithFolderLevelPermissions.js.map +1 -1
  76. package/folder/useCases/GetFolder/index.d.ts +1 -1
  77. package/folder/useCases/GetFolder/index.js.map +1 -1
  78. package/folder/useCases/GetFolderHierarchy/GetFolderHierarchyWithFolderLevelPermissions.d.ts +1 -1
  79. package/folder/useCases/GetFolderHierarchy/GetFolderHierarchyWithFolderLevelPermissions.js.map +1 -1
  80. package/folder/useCases/GetFolderHierarchy/index.d.ts +1 -1
  81. package/folder/useCases/GetFolderHierarchy/index.js.map +1 -1
  82. package/folder/useCases/ListFolders/IListFolders.d.ts +1 -1
  83. package/folder/useCases/ListFolders/IListFolders.js.map +1 -1
  84. package/folder/useCases/ListFolders/ListFolders.d.ts +1 -1
  85. package/folder/useCases/ListFolders/ListFolders.js.map +1 -1
  86. package/folder/useCases/ListFolders/ListFoldersWithFolderLevelPermissions.d.ts +1 -1
  87. package/folder/useCases/ListFolders/ListFoldersWithFolderLevelPermissions.js.map +1 -1
  88. package/folder/useCases/ListFolders/index.d.ts +1 -1
  89. package/folder/useCases/ListFolders/index.js.map +1 -1
  90. package/folder/useCases/UpdateFolder/UpdateFolderWithFolderLevelPermissions.d.ts +1 -1
  91. package/folder/useCases/UpdateFolder/UpdateFolderWithFolderLevelPermissions.js +1 -1
  92. package/folder/useCases/UpdateFolder/UpdateFolderWithFolderLevelPermissions.js.map +1 -1
  93. package/folder/useCases/UpdateFolder/index.d.ts +2 -2
  94. package/folder/useCases/UpdateFolder/index.js.map +1 -1
  95. package/index.d.ts +1 -1
  96. package/index.js.map +1 -1
  97. package/package.json +28 -28
  98. package/plugins/AcoAppModifierPlugin.d.ts +2 -2
  99. package/plugins/AcoAppModifierPlugin.js.map +1 -1
  100. package/plugins/AcoAppRegisterPlugin.d.ts +1 -1
  101. package/plugins/AcoAppRegisterPlugin.js.map +1 -1
  102. package/record/graphql/createAppResolvers.d.ts +2 -2
  103. package/record/graphql/createAppResolvers.js.map +1 -1
  104. package/record/graphql/createAppSchema.d.ts +2 -2
  105. package/record/graphql/createAppSchema.js +2 -2
  106. package/record/graphql/createAppSchema.js.map +1 -1
  107. package/record/record.crud.d.ts +2 -2
  108. package/record/record.crud.js.map +1 -1
  109. package/record/record.gql.d.ts +1 -1
  110. package/record/record.gql.js.map +1 -1
  111. package/record/record.model.d.ts +1 -1
  112. package/record/record.model.js.map +1 -1
  113. package/record/record.so.d.ts +2 -2
  114. package/record/record.so.js.map +1 -1
  115. package/record/record.types.d.ts +3 -3
  116. package/record/record.types.js.map +1 -1
  117. package/types.d.ts +9 -9
  118. package/types.js.map +1 -1
  119. package/utils/FoldersCacheFactory.d.ts +1 -1
  120. package/utils/FoldersCacheFactory.js.map +1 -1
  121. package/utils/ListFoldersRepository.d.ts +2 -2
  122. package/utils/ListFoldersRepository.js.map +1 -1
  123. package/utils/createListSort.d.ts +2 -2
  124. package/utils/createListSort.js.map +1 -1
  125. package/utils/createModelField.d.ts +1 -1
  126. package/utils/createModelField.js.map +1 -1
  127. package/utils/createOperationsWrapper.d.ts +2 -2
  128. package/utils/createOperationsWrapper.js.map +1 -1
  129. package/utils/decorators/CmsEntriesCrudDecorators.d.ts +2 -2
  130. package/utils/decorators/CmsEntriesCrudDecorators.js +14 -14
  131. package/utils/decorators/CmsEntriesCrudDecorators.js.map +1 -1
  132. package/utils/decorators/FilterEntriesByFolderFactory.d.ts +2 -2
  133. package/utils/decorators/FilterEntriesByFolderFactory.js.map +1 -1
  134. package/utils/decorators/ListEntriesFactory.d.ts +3 -2
  135. package/utils/decorators/ListEntriesFactory.js.map +1 -1
  136. package/utils/decorators/decorateIfModelAuthorizationEnabled.d.ts +2 -3
  137. package/utils/decorators/decorateIfModelAuthorizationEnabled.js +1 -5
  138. package/utils/decorators/decorateIfModelAuthorizationEnabled.js.map +1 -1
  139. package/utils/decorators/hasRootFolderId.d.ts +1 -1
  140. package/utils/decorators/hasRootFolderId.js.map +1 -1
  141. package/utils/decorators/isPageModel.d.ts +1 -1
  142. package/utils/decorators/isPageModel.js.map +1 -1
  143. package/utils/ensureAuthentication.d.ts +1 -1
  144. package/utils/ensureAuthentication.js.map +1 -1
  145. package/utils/modelFactory.d.ts +1 -1
  146. package/utils/modelFactory.js.map +1 -1
  147. package/utils/pickEntryFieldValues.d.ts +1 -1
  148. package/utils/pickEntryFieldValues.js.map +1 -1
  149. package/utils/resolve.d.ts +1 -1
@@ -1,3 +1,3 @@
1
- import { CreateAcoStorageOperationsParams } from "../createAcoStorageOperations";
2
- import { AcoFolderStorageOperations } from "./folder.types";
1
+ import type { CreateAcoStorageOperationsParams } from "../createAcoStorageOperations";
2
+ import type { AcoFolderStorageOperations } from "./folder.types";
3
3
  export declare const createFolderOperations: (params: CreateAcoStorageOperationsParams) => AcoFolderStorageOperations;
@@ -1 +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 { CreateAcoStorageOperationsParams } from \"~/createAcoStorageOperations\";\nimport { createListSort } from \"~/utils/createListSort\";\nimport { createOperationsWrapper } from \"~/utils/createOperationsWrapper\";\nimport { pickEntryFieldValues } from \"~/utils/pickEntryFieldValues\";\nimport { Path } from \"~/utils/Path\";\nimport { AcoFolderStorageOperations, Folder } from \"./folder.types\";\nimport { ENTRY_META_FIELDS } from \"@webiny/api-headless-cms/constants\";\nimport { 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":[]}
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":[]}
@@ -1,5 +1,6 @@
1
- import { type FolderPermission, ListMeta, ListSort, User } from "../types";
2
- import { Topic } from "@webiny/pubsub/types";
1
+ import type { ListMeta, ListSort, User } from "../types";
2
+ import { type FolderPermission } from "../types";
3
+ import type { Topic } from "@webiny/pubsub/types";
3
4
  export interface Folder {
4
5
  id: string;
5
6
  entryId: string;
@@ -22,6 +23,14 @@ export interface ListFoldersWhere {
22
23
  id_not_in?: string[];
23
24
  parentId?: string | null;
24
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;
25
34
  path?: string;
26
35
  path_not?: string;
27
36
  path_contains?: string;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["folder.types.ts"],"sourcesContent":["import { type FolderPermission, ListMeta, ListSort, User } from \"~/types\";\nimport { 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 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":[]}
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":[]}
@@ -1,2 +1,2 @@
1
- import { AcoContext } from "../types";
1
+ import type { AcoContext } from "../types";
2
2
  export declare const onFolderBeforeDeleteAcoHook: (context: AcoContext) => void;
@@ -1 +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 { 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":[]}
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":[]}
@@ -1,2 +1,2 @@
1
- import { AcoContext } from "../types";
1
+ import type { AcoContext } from "../types";
2
2
  export declare const onFolderBeforeDeleteFmHook: (context: AcoContext) => void;
@@ -1 +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 { 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":[]}
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":[]}
@@ -1,2 +1,2 @@
1
- import { AcoContext } from "../types";
1
+ import type { AcoContext } from "../types";
2
2
  export declare const onFolderBeforeDeleteHcmsHook: (context: AcoContext) => void;
@@ -1 +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 { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { 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":[]}
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":[]}
@@ -1,6 +1,6 @@
1
1
  import type { ICreateFolder } from "./ICreateFolder";
2
2
  import type { CreateFolderParams } from "../../folder.types";
3
- import { FolderLevelPermissions } from "../../../flp";
3
+ import type { FolderLevelPermissions } from "../../../flp";
4
4
  export declare class CreateFolderWithFolderLevelPermissions implements ICreateFolder {
5
5
  private folderLevelPermissions;
6
6
  private readonly decoretee;
@@ -1 +1 @@
1
- {"version":3,"names":["_apiSecurity","require","CreateFolderWithFolderLevelPermissions","constructor","folderLevelPermissions","decoretee","execute","params","canCreateFolder","parentId","permissions","getFolderLevelPermissions","canAccessFolder","rwd","canCreateFolderInRoot","NotAuthorizedError","folder","permissionsWithDefaults","getDefaultPermissions","exports"],"sources":["CreateFolderWithFolderLevelPermissions.ts"],"sourcesContent":["import type { ICreateFolder } from \"./ICreateFolder\";\nimport type { CreateFolderParams } from \"~/folder/folder.types\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\nimport { FolderLevelPermissions } from \"~/flp\";\n\nexport class CreateFolderWithFolderLevelPermissions implements ICreateFolder {\n private folderLevelPermissions: FolderLevelPermissions;\n private readonly decoretee: ICreateFolder;\n\n constructor(folderLevelPermissions: FolderLevelPermissions, decoretee: ICreateFolder) {\n this.folderLevelPermissions = folderLevelPermissions;\n this.decoretee = decoretee;\n }\n\n async execute(params: CreateFolderParams) {\n let canCreateFolder: boolean;\n if (params.parentId) {\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(\n params.parentId\n );\n canCreateFolder = await this.folderLevelPermissions.canAccessFolder({\n permissions,\n rwd: \"w\"\n });\n } else {\n canCreateFolder = this.folderLevelPermissions.canCreateFolderInRoot();\n }\n\n if (!canCreateFolder) {\n throw new NotAuthorizedError();\n }\n\n const folder = await this.decoretee.execute(params);\n\n // Let's set default permissions based on the current user.\n const permissionsWithDefaults = await this.folderLevelPermissions.getDefaultPermissions(\n folder?.permissions ?? []\n );\n\n return {\n ...folder,\n permissions: permissionsWithDefaults\n };\n }\n}\n"],"mappings":";;;;;;AAEA,IAAAA,YAAA,GAAAC,OAAA;AAGO,MAAMC,sCAAsC,CAA0B;EAIzEC,WAAWA,CAACC,sBAA8C,EAAEC,SAAwB,EAAE;IAClF,IAAI,CAACD,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACC,SAAS,GAAGA,SAAS;EAC9B;EAEA,MAAMC,OAAOA,CAACC,MAA0B,EAAE;IACtC,IAAIC,eAAwB;IAC5B,IAAID,MAAM,CAACE,QAAQ,EAAE;MACjB,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACN,sBAAsB,CAACO,yBAAyB,CAC3EJ,MAAM,CAACE,QACX,CAAC;MACDD,eAAe,GAAG,MAAM,IAAI,CAACJ,sBAAsB,CAACQ,eAAe,CAAC;QAChEF,WAAW;QACXG,GAAG,EAAE;MACT,CAAC,CAAC;IACN,CAAC,MAAM;MACHL,eAAe,GAAG,IAAI,CAACJ,sBAAsB,CAACU,qBAAqB,CAAC,CAAC;IACzE;IAEA,IAAI,CAACN,eAAe,EAAE;MAClB,MAAM,IAAIO,+BAAkB,CAAC,CAAC;IAClC;IAEA,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACX,SAAS,CAACC,OAAO,CAACC,MAAM,CAAC;;IAEnD;IACA,MAAMU,uBAAuB,GAAG,MAAM,IAAI,CAACb,sBAAsB,CAACc,qBAAqB,CACnFF,MAAM,EAAEN,WAAW,IAAI,EAC3B,CAAC;IAED,OAAO;MACH,GAAGM,MAAM;MACTN,WAAW,EAAEO;IACjB,CAAC;EACL;AACJ;AAACE,OAAA,CAAAjB,sCAAA,GAAAA,sCAAA","ignoreList":[]}
1
+ {"version":3,"names":["_apiSecurity","require","CreateFolderWithFolderLevelPermissions","constructor","folderLevelPermissions","decoretee","execute","params","canCreateFolder","parentId","permissions","getFolderLevelPermissions","canAccessFolder","rwd","canCreateFolderInRoot","NotAuthorizedError","folder","permissionsWithDefaults","getDefaultPermissions","exports"],"sources":["CreateFolderWithFolderLevelPermissions.ts"],"sourcesContent":["import type { ICreateFolder } from \"./ICreateFolder\";\nimport type { CreateFolderParams } from \"~/folder/folder.types\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\nimport type { FolderLevelPermissions } from \"~/flp\";\n\nexport class CreateFolderWithFolderLevelPermissions implements ICreateFolder {\n private folderLevelPermissions: FolderLevelPermissions;\n private readonly decoretee: ICreateFolder;\n\n constructor(folderLevelPermissions: FolderLevelPermissions, decoretee: ICreateFolder) {\n this.folderLevelPermissions = folderLevelPermissions;\n this.decoretee = decoretee;\n }\n\n async execute(params: CreateFolderParams) {\n let canCreateFolder: boolean;\n if (params.parentId) {\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(\n params.parentId\n );\n canCreateFolder = await this.folderLevelPermissions.canAccessFolder({\n permissions,\n rwd: \"w\"\n });\n } else {\n canCreateFolder = this.folderLevelPermissions.canCreateFolderInRoot();\n }\n\n if (!canCreateFolder) {\n throw new NotAuthorizedError();\n }\n\n const folder = await this.decoretee.execute(params);\n\n // Let's set default permissions based on the current user.\n const permissionsWithDefaults = await this.folderLevelPermissions.getDefaultPermissions(\n folder?.permissions ?? []\n );\n\n return {\n ...folder,\n permissions: permissionsWithDefaults\n };\n }\n}\n"],"mappings":";;;;;;AAEA,IAAAA,YAAA,GAAAC,OAAA;AAGO,MAAMC,sCAAsC,CAA0B;EAIzEC,WAAWA,CAACC,sBAA8C,EAAEC,SAAwB,EAAE;IAClF,IAAI,CAACD,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACC,SAAS,GAAGA,SAAS;EAC9B;EAEA,MAAMC,OAAOA,CAACC,MAA0B,EAAE;IACtC,IAAIC,eAAwB;IAC5B,IAAID,MAAM,CAACE,QAAQ,EAAE;MACjB,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACN,sBAAsB,CAACO,yBAAyB,CAC3EJ,MAAM,CAACE,QACX,CAAC;MACDD,eAAe,GAAG,MAAM,IAAI,CAACJ,sBAAsB,CAACQ,eAAe,CAAC;QAChEF,WAAW;QACXG,GAAG,EAAE;MACT,CAAC,CAAC;IACN,CAAC,MAAM;MACHL,eAAe,GAAG,IAAI,CAACJ,sBAAsB,CAACU,qBAAqB,CAAC,CAAC;IACzE;IAEA,IAAI,CAACN,eAAe,EAAE;MAClB,MAAM,IAAIO,+BAAkB,CAAC,CAAC;IAClC;IAEA,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACX,SAAS,CAACC,OAAO,CAACC,MAAM,CAAC;;IAEnD;IACA,MAAMU,uBAAuB,GAAG,MAAM,IAAI,CAACb,sBAAsB,CAACc,qBAAqB,CACnFF,MAAM,EAAEN,WAAW,IAAI,EAC3B,CAAC;IAED,OAAO;MACH,GAAGM,MAAM;MACTN,WAAW,EAAEO;IACjB,CAAC;EACL;AACJ;AAACE,OAAA,CAAAjB,sCAAA,GAAAA,sCAAA","ignoreList":[]}
@@ -1,7 +1,7 @@
1
- import { Topic } from "@webiny/pubsub/types";
1
+ import type { Topic } from "@webiny/pubsub/types";
2
2
  import { type AcoFolderStorageOperations, type OnFolderAfterCreateTopicParams, type OnFolderBeforeCreateTopicParams } from "../../folder.types";
3
3
  import { CreateFolderWithFolderLevelPermissions } from "./CreateFolderWithFolderLevelPermissions";
4
- import { FolderLevelPermissions } from "../../../flp";
4
+ import type { FolderLevelPermissions } from "../../../flp";
5
5
  export interface CreateFolderUseCasesTopics {
6
6
  onFolderBeforeCreate: Topic<OnFolderBeforeCreateTopicParams>;
7
7
  onFolderAfterCreate: Topic<OnFolderAfterCreateTopicParams>;
@@ -1 +1 @@
1
- {"version":3,"names":["_CreateFolder","require","_CreateFolderWithEvents","_CreateFolderWithFolderLevelPermissions","getCreateFolderUseCases","params","createFolder","CreateFolder","createOperation","createFolderUseCaseWithEvents","CreateFolderWithEvents","topics","createFolderUseCase","CreateFolderWithFolderLevelPermissions","folderLevelPermissions","exports"],"sources":["index.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport {\n type AcoFolderStorageOperations,\n type OnFolderAfterCreateTopicParams,\n type OnFolderBeforeCreateTopicParams\n} from \"~/folder/folder.types\";\nimport { CreateFolder } from \"./CreateFolder\";\nimport { CreateFolderWithEvents } from \"./CreateFolderWithEvents\";\nimport { CreateFolderWithFolderLevelPermissions } from \"./CreateFolderWithFolderLevelPermissions\";\nimport { FolderLevelPermissions } from \"~/flp\";\n\nexport interface CreateFolderUseCasesTopics {\n onFolderBeforeCreate: Topic<OnFolderBeforeCreateTopicParams>;\n onFolderAfterCreate: Topic<OnFolderAfterCreateTopicParams>;\n}\n\ninterface CreateFolderUseCasesParams {\n createOperation: AcoFolderStorageOperations[\"createFolder\"];\n folderLevelPermissions: FolderLevelPermissions;\n topics: CreateFolderUseCasesTopics;\n}\n\nexport const getCreateFolderUseCases = (params: CreateFolderUseCasesParams) => {\n const createFolder = new CreateFolder(params.createOperation);\n const createFolderUseCaseWithEvents = new CreateFolderWithEvents(params.topics, createFolder);\n const createFolderUseCase = new CreateFolderWithFolderLevelPermissions(\n params.folderLevelPermissions,\n createFolderUseCaseWithEvents\n );\n\n return {\n createFolderUseCase\n };\n};\n"],"mappings":";;;;;;AAMA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,uBAAA,GAAAD,OAAA;AACA,IAAAE,uCAAA,GAAAF,OAAA;AAcO,MAAMG,uBAAuB,GAAIC,MAAkC,IAAK;EAC3E,MAAMC,YAAY,GAAG,IAAIC,0BAAY,CAACF,MAAM,CAACG,eAAe,CAAC;EAC7D,MAAMC,6BAA6B,GAAG,IAAIC,8CAAsB,CAACL,MAAM,CAACM,MAAM,EAAEL,YAAY,CAAC;EAC7F,MAAMM,mBAAmB,GAAG,IAAIC,8EAAsC,CAClER,MAAM,CAACS,sBAAsB,EAC7BL,6BACJ,CAAC;EAED,OAAO;IACHG;EACJ,CAAC;AACL,CAAC;AAACG,OAAA,CAAAX,uBAAA,GAAAA,uBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_CreateFolder","require","_CreateFolderWithEvents","_CreateFolderWithFolderLevelPermissions","getCreateFolderUseCases","params","createFolder","CreateFolder","createOperation","createFolderUseCaseWithEvents","CreateFolderWithEvents","topics","createFolderUseCase","CreateFolderWithFolderLevelPermissions","folderLevelPermissions","exports"],"sources":["index.ts"],"sourcesContent":["import type { Topic } from \"@webiny/pubsub/types\";\nimport {\n type AcoFolderStorageOperations,\n type OnFolderAfterCreateTopicParams,\n type OnFolderBeforeCreateTopicParams\n} from \"~/folder/folder.types\";\nimport { CreateFolder } from \"./CreateFolder\";\nimport { CreateFolderWithEvents } from \"./CreateFolderWithEvents\";\nimport { CreateFolderWithFolderLevelPermissions } from \"./CreateFolderWithFolderLevelPermissions\";\nimport type { FolderLevelPermissions } from \"~/flp\";\n\nexport interface CreateFolderUseCasesTopics {\n onFolderBeforeCreate: Topic<OnFolderBeforeCreateTopicParams>;\n onFolderAfterCreate: Topic<OnFolderAfterCreateTopicParams>;\n}\n\ninterface CreateFolderUseCasesParams {\n createOperation: AcoFolderStorageOperations[\"createFolder\"];\n folderLevelPermissions: FolderLevelPermissions;\n topics: CreateFolderUseCasesTopics;\n}\n\nexport const getCreateFolderUseCases = (params: CreateFolderUseCasesParams) => {\n const createFolder = new CreateFolder(params.createOperation);\n const createFolderUseCaseWithEvents = new CreateFolderWithEvents(params.topics, createFolder);\n const createFolderUseCase = new CreateFolderWithFolderLevelPermissions(\n params.folderLevelPermissions,\n createFolderUseCaseWithEvents\n );\n\n return {\n createFolderUseCase\n };\n};\n"],"mappings":";;;;;;AAMA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,uBAAA,GAAAD,OAAA;AACA,IAAAE,uCAAA,GAAAF,OAAA;AAcO,MAAMG,uBAAuB,GAAIC,MAAkC,IAAK;EAC3E,MAAMC,YAAY,GAAG,IAAIC,0BAAY,CAACF,MAAM,CAACG,eAAe,CAAC;EAC7D,MAAMC,6BAA6B,GAAG,IAAIC,8CAAsB,CAACL,MAAM,CAACM,MAAM,EAAEL,YAAY,CAAC;EAC7F,MAAMM,mBAAmB,GAAG,IAAIC,8EAAsC,CAClER,MAAM,CAACS,sBAAsB,EAC7BL,6BACJ,CAAC;EAED,OAAO;IACHG;EACJ,CAAC;AACL,CAAC;AAACG,OAAA,CAAAX,uBAAA,GAAAA,uBAAA","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { FolderLevelPermissions } from "../../../flp";
1
+ import type { FolderLevelPermissions } from "../../../flp";
2
2
  import type { IDeleteFolder } from "./IDeleteFolder";
3
3
  import type { DeleteFolderParams } from "../../folder.types";
4
4
  export declare class DeleteFolderWithFolderLevelPermissions implements IDeleteFolder {
@@ -1 +1 @@
1
- {"version":3,"names":["DeleteFolderWithFolderLevelPermissions","constructor","folderLevelPermissions","decoretee","execute","params","permissions","getFolderLevelPermissions","id","ensureCanAccessFolder","rwd","exports"],"sources":["DeleteFolderWithFolderLevelPermissions.ts"],"sourcesContent":["import { FolderLevelPermissions } from \"~/flp\";\nimport type { IDeleteFolder } from \"./IDeleteFolder\";\nimport type { DeleteFolderParams } from \"~/folder/folder.types\";\n\nexport class DeleteFolderWithFolderLevelPermissions implements IDeleteFolder {\n private folderLevelPermissions: FolderLevelPermissions;\n private readonly decoretee: IDeleteFolder;\n\n constructor(folderLevelPermissions: FolderLevelPermissions, decoretee: IDeleteFolder) {\n this.folderLevelPermissions = folderLevelPermissions;\n this.decoretee = decoretee;\n }\n\n async execute(params: DeleteFolderParams) {\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(params.id);\n await this.folderLevelPermissions.ensureCanAccessFolder({\n permissions,\n rwd: \"d\"\n });\n await this.decoretee.execute(params);\n return true;\n }\n}\n"],"mappings":";;;;;;AAIO,MAAMA,sCAAsC,CAA0B;EAIzEC,WAAWA,CAACC,sBAA8C,EAAEC,SAAwB,EAAE;IAClF,IAAI,CAACD,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACC,SAAS,GAAGA,SAAS;EAC9B;EAEA,MAAMC,OAAOA,CAACC,MAA0B,EAAE;IACtC,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACJ,sBAAsB,CAACK,yBAAyB,CAACF,MAAM,CAACG,EAAE,CAAC;IAC1F,MAAM,IAAI,CAACN,sBAAsB,CAACO,qBAAqB,CAAC;MACpDH,WAAW;MACXI,GAAG,EAAE;IACT,CAAC,CAAC;IACF,MAAM,IAAI,CAACP,SAAS,CAACC,OAAO,CAACC,MAAM,CAAC;IACpC,OAAO,IAAI;EACf;AACJ;AAACM,OAAA,CAAAX,sCAAA,GAAAA,sCAAA","ignoreList":[]}
1
+ {"version":3,"names":["DeleteFolderWithFolderLevelPermissions","constructor","folderLevelPermissions","decoretee","execute","params","permissions","getFolderLevelPermissions","id","ensureCanAccessFolder","rwd","exports"],"sources":["DeleteFolderWithFolderLevelPermissions.ts"],"sourcesContent":["import type { FolderLevelPermissions } from \"~/flp\";\nimport type { IDeleteFolder } from \"./IDeleteFolder\";\nimport type { DeleteFolderParams } from \"~/folder/folder.types\";\n\nexport class DeleteFolderWithFolderLevelPermissions implements IDeleteFolder {\n private folderLevelPermissions: FolderLevelPermissions;\n private readonly decoretee: IDeleteFolder;\n\n constructor(folderLevelPermissions: FolderLevelPermissions, decoretee: IDeleteFolder) {\n this.folderLevelPermissions = folderLevelPermissions;\n this.decoretee = decoretee;\n }\n\n async execute(params: DeleteFolderParams) {\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(params.id);\n await this.folderLevelPermissions.ensureCanAccessFolder({\n permissions,\n rwd: \"d\"\n });\n await this.decoretee.execute(params);\n return true;\n }\n}\n"],"mappings":";;;;;;AAIO,MAAMA,sCAAsC,CAA0B;EAIzEC,WAAWA,CAACC,sBAA8C,EAAEC,SAAwB,EAAE;IAClF,IAAI,CAACD,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACC,SAAS,GAAGA,SAAS;EAC9B;EAEA,MAAMC,OAAOA,CAACC,MAA0B,EAAE;IACtC,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACJ,sBAAsB,CAACK,yBAAyB,CAACF,MAAM,CAACG,EAAE,CAAC;IAC1F,MAAM,IAAI,CAACN,sBAAsB,CAACO,qBAAqB,CAAC;MACpDH,WAAW;MACXI,GAAG,EAAE;IACT,CAAC,CAAC;IACF,MAAM,IAAI,CAACP,SAAS,CAACC,OAAO,CAACC,MAAM,CAAC;IACpC,OAAO,IAAI;EACf;AACJ;AAACM,OAAA,CAAAX,sCAAA,GAAAA,sCAAA","ignoreList":[]}
@@ -1,7 +1,7 @@
1
- import { Topic } from "@webiny/pubsub/types";
1
+ import type { Topic } from "@webiny/pubsub/types";
2
2
  import { type AcoFolderStorageOperations, type OnFolderAfterDeleteTopicParams, type OnFolderBeforeDeleteTopicParams } from "../../folder.types";
3
3
  import { DeleteFolderWithFolderLevelPermissions } from "./DeleteFolderWithFolderLevelPermissions";
4
- import { FolderLevelPermissions } from "../../../flp";
4
+ import type { FolderLevelPermissions } from "../../../flp";
5
5
  export interface DeleteFolderUseCasesTopics {
6
6
  onFolderBeforeDelete: Topic<OnFolderBeforeDeleteTopicParams>;
7
7
  onFolderAfterDelete: Topic<OnFolderAfterDeleteTopicParams>;
@@ -1 +1 @@
1
- {"version":3,"names":["_DeleteFolder","require","_DeleteFolderWithEvents","_DeleteFolderWithFolderLevelPermissions","getDeleteFolderUseCases","params","deleteFolder","DeleteFolder","deleteOperation","deleteFolderUseCaseWithEvents","DeleteFolderWithEvents","topics","getOperation","deleteFolderUseCase","DeleteFolderWithFolderLevelPermissions","folderLevelPermissions","exports"],"sources":["index.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport {\n type AcoFolderStorageOperations,\n type OnFolderAfterDeleteTopicParams,\n type OnFolderBeforeDeleteTopicParams\n} from \"~/folder/folder.types\";\nimport { DeleteFolder } from \"./DeleteFolder\";\nimport { DeleteFolderWithEvents } from \"./DeleteFolderWithEvents\";\nimport { DeleteFolderWithFolderLevelPermissions } from \"./DeleteFolderWithFolderLevelPermissions\";\nimport { FolderLevelPermissions } from \"~/flp\";\n\nexport interface DeleteFolderUseCasesTopics {\n onFolderBeforeDelete: Topic<OnFolderBeforeDeleteTopicParams>;\n onFolderAfterDelete: Topic<OnFolderAfterDeleteTopicParams>;\n}\n\ninterface DeleteFolderUseCasesParams {\n deleteOperation: AcoFolderStorageOperations[\"deleteFolder\"];\n getOperation: AcoFolderStorageOperations[\"getFolder\"];\n folderLevelPermissions: FolderLevelPermissions;\n topics: DeleteFolderUseCasesTopics;\n}\n\nexport const getDeleteFolderUseCases = (params: DeleteFolderUseCasesParams) => {\n const deleteFolder = new DeleteFolder(params.deleteOperation);\n const deleteFolderUseCaseWithEvents = new DeleteFolderWithEvents(\n params.topics,\n params.getOperation,\n deleteFolder\n );\n const deleteFolderUseCase = new DeleteFolderWithFolderLevelPermissions(\n params.folderLevelPermissions,\n deleteFolderUseCaseWithEvents\n );\n\n return {\n deleteFolderUseCase\n };\n};\n"],"mappings":";;;;;;AAMA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,uBAAA,GAAAD,OAAA;AACA,IAAAE,uCAAA,GAAAF,OAAA;AAeO,MAAMG,uBAAuB,GAAIC,MAAkC,IAAK;EAC3E,MAAMC,YAAY,GAAG,IAAIC,0BAAY,CAACF,MAAM,CAACG,eAAe,CAAC;EAC7D,MAAMC,6BAA6B,GAAG,IAAIC,8CAAsB,CAC5DL,MAAM,CAACM,MAAM,EACbN,MAAM,CAACO,YAAY,EACnBN,YACJ,CAAC;EACD,MAAMO,mBAAmB,GAAG,IAAIC,8EAAsC,CAClET,MAAM,CAACU,sBAAsB,EAC7BN,6BACJ,CAAC;EAED,OAAO;IACHI;EACJ,CAAC;AACL,CAAC;AAACG,OAAA,CAAAZ,uBAAA,GAAAA,uBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_DeleteFolder","require","_DeleteFolderWithEvents","_DeleteFolderWithFolderLevelPermissions","getDeleteFolderUseCases","params","deleteFolder","DeleteFolder","deleteOperation","deleteFolderUseCaseWithEvents","DeleteFolderWithEvents","topics","getOperation","deleteFolderUseCase","DeleteFolderWithFolderLevelPermissions","folderLevelPermissions","exports"],"sources":["index.ts"],"sourcesContent":["import type { Topic } from \"@webiny/pubsub/types\";\nimport {\n type AcoFolderStorageOperations,\n type OnFolderAfterDeleteTopicParams,\n type OnFolderBeforeDeleteTopicParams\n} from \"~/folder/folder.types\";\nimport { DeleteFolder } from \"./DeleteFolder\";\nimport { DeleteFolderWithEvents } from \"./DeleteFolderWithEvents\";\nimport { DeleteFolderWithFolderLevelPermissions } from \"./DeleteFolderWithFolderLevelPermissions\";\nimport type { FolderLevelPermissions } from \"~/flp\";\n\nexport interface DeleteFolderUseCasesTopics {\n onFolderBeforeDelete: Topic<OnFolderBeforeDeleteTopicParams>;\n onFolderAfterDelete: Topic<OnFolderAfterDeleteTopicParams>;\n}\n\ninterface DeleteFolderUseCasesParams {\n deleteOperation: AcoFolderStorageOperations[\"deleteFolder\"];\n getOperation: AcoFolderStorageOperations[\"getFolder\"];\n folderLevelPermissions: FolderLevelPermissions;\n topics: DeleteFolderUseCasesTopics;\n}\n\nexport const getDeleteFolderUseCases = (params: DeleteFolderUseCasesParams) => {\n const deleteFolder = new DeleteFolder(params.deleteOperation);\n const deleteFolderUseCaseWithEvents = new DeleteFolderWithEvents(\n params.topics,\n params.getOperation,\n deleteFolder\n );\n const deleteFolderUseCase = new DeleteFolderWithFolderLevelPermissions(\n params.folderLevelPermissions,\n deleteFolderUseCaseWithEvents\n );\n\n return {\n deleteFolderUseCase\n };\n};\n"],"mappings":";;;;;;AAMA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,uBAAA,GAAAD,OAAA;AACA,IAAAE,uCAAA,GAAAF,OAAA;AAeO,MAAMG,uBAAuB,GAAIC,MAAkC,IAAK;EAC3E,MAAMC,YAAY,GAAG,IAAIC,0BAAY,CAACF,MAAM,CAACG,eAAe,CAAC;EAC7D,MAAMC,6BAA6B,GAAG,IAAIC,8CAAsB,CAC5DL,MAAM,CAACM,MAAM,EACbN,MAAM,CAACO,YAAY,EACnBN,YACJ,CAAC;EACD,MAAMO,mBAAmB,GAAG,IAAIC,8EAAsC,CAClET,MAAM,CAACU,sBAAsB,EAC7BN,6BACJ,CAAC;EAED,OAAO;IACHI;EACJ,CAAC;AACL,CAAC;AAACG,OAAA,CAAAZ,uBAAA,GAAAA,uBAAA","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { Folder } from "../../folder.types";
1
+ import type { Folder } from "../../folder.types";
2
2
  export interface GetAncestorsParams {
3
3
  folder: Folder;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["IGetAncestors.ts"],"sourcesContent":["import { Folder } from \"~/folder/folder.types\";\n\nexport interface GetAncestorsParams {\n folder: Folder;\n}\n\nexport interface IGetAncestors {\n execute: (params: GetAncestorsParams) => Promise<Folder[]>;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["IGetAncestors.ts"],"sourcesContent":["import type { Folder } from \"~/folder/folder.types\";\n\nexport interface GetAncestorsParams {\n folder: Folder;\n}\n\nexport interface IGetAncestors {\n execute: (params: GetAncestorsParams) => Promise<Folder[]>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import type { IGetFolder } from "./IGetFolder";
2
- import { FolderLevelPermissions } from "../../../flp";
2
+ import type { FolderLevelPermissions } from "../../../flp";
3
3
  import type { GetFolderParams } from "../../folder.types";
4
4
  export declare class GetFolderWithFolderLevelPermissions implements IGetFolder {
5
5
  private folderLevelPermissions;
@@ -1 +1 @@
1
- {"version":3,"names":["_apiSecurity","require","GetFolderWithFolderLevelPermissions","constructor","folderLevelPermissions","decoretee","execute","params","folder","permissions","getFolderLevelPermissions","id","canAccessFolder","rwd","NotAuthorizedError","exports"],"sources":["GetFolderWithFolderLevelPermissions.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport type { IGetFolder } from \"./IGetFolder\";\nimport { FolderLevelPermissions } from \"~/flp\";\nimport type { GetFolderParams } from \"~/folder/folder.types\";\n\nexport class GetFolderWithFolderLevelPermissions implements IGetFolder {\n private folderLevelPermissions: FolderLevelPermissions;\n private readonly decoretee: IGetFolder;\n\n constructor(folderLevelPermissions: FolderLevelPermissions, decoretee: IGetFolder) {\n this.folderLevelPermissions = folderLevelPermissions;\n this.decoretee = decoretee;\n }\n\n async execute(params: GetFolderParams) {\n const folder = await this.decoretee.execute(params);\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(folder.id);\n\n // Let's check if the current user has read access level.\n const canAccessFolder = await this.folderLevelPermissions.canAccessFolder({\n permissions,\n rwd: \"r\"\n });\n\n if (!canAccessFolder) {\n throw new NotAuthorizedError();\n }\n\n return {\n ...folder,\n permissions\n };\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAKO,MAAMC,mCAAmC,CAAuB;EAInEC,WAAWA,CAACC,sBAA8C,EAAEC,SAAqB,EAAE;IAC/E,IAAI,CAACD,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACC,SAAS,GAAGA,SAAS;EAC9B;EAEA,MAAMC,OAAOA,CAACC,MAAuB,EAAE;IACnC,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACH,SAAS,CAACC,OAAO,CAACC,MAAM,CAAC;IACnD,MAAME,WAAW,GAAG,MAAM,IAAI,CAACL,sBAAsB,CAACM,yBAAyB,CAACF,MAAM,CAACG,EAAE,CAAC;;IAE1F;IACA,MAAMC,eAAe,GAAG,MAAM,IAAI,CAACR,sBAAsB,CAACQ,eAAe,CAAC;MACtEH,WAAW;MACXI,GAAG,EAAE;IACT,CAAC,CAAC;IAEF,IAAI,CAACD,eAAe,EAAE;MAClB,MAAM,IAAIE,+BAAkB,CAAC,CAAC;IAClC;IAEA,OAAO;MACH,GAAGN,MAAM;MACTC;IACJ,CAAC;EACL;AACJ;AAACM,OAAA,CAAAb,mCAAA,GAAAA,mCAAA","ignoreList":[]}
1
+ {"version":3,"names":["_apiSecurity","require","GetFolderWithFolderLevelPermissions","constructor","folderLevelPermissions","decoretee","execute","params","folder","permissions","getFolderLevelPermissions","id","canAccessFolder","rwd","NotAuthorizedError","exports"],"sources":["GetFolderWithFolderLevelPermissions.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport type { IGetFolder } from \"./IGetFolder\";\nimport type { FolderLevelPermissions } from \"~/flp\";\nimport type { GetFolderParams } from \"~/folder/folder.types\";\n\nexport class GetFolderWithFolderLevelPermissions implements IGetFolder {\n private folderLevelPermissions: FolderLevelPermissions;\n private readonly decoretee: IGetFolder;\n\n constructor(folderLevelPermissions: FolderLevelPermissions, decoretee: IGetFolder) {\n this.folderLevelPermissions = folderLevelPermissions;\n this.decoretee = decoretee;\n }\n\n async execute(params: GetFolderParams) {\n const folder = await this.decoretee.execute(params);\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(folder.id);\n\n // Let's check if the current user has read access level.\n const canAccessFolder = await this.folderLevelPermissions.canAccessFolder({\n permissions,\n rwd: \"r\"\n });\n\n if (!canAccessFolder) {\n throw new NotAuthorizedError();\n }\n\n return {\n ...folder,\n permissions\n };\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAKO,MAAMC,mCAAmC,CAAuB;EAInEC,WAAWA,CAACC,sBAA8C,EAAEC,SAAqB,EAAE;IAC/E,IAAI,CAACD,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACC,SAAS,GAAGA,SAAS;EAC9B;EAEA,MAAMC,OAAOA,CAACC,MAAuB,EAAE;IACnC,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACH,SAAS,CAACC,OAAO,CAACC,MAAM,CAAC;IACnD,MAAME,WAAW,GAAG,MAAM,IAAI,CAACL,sBAAsB,CAACM,yBAAyB,CAACF,MAAM,CAACG,EAAE,CAAC;;IAE1F;IACA,MAAMC,eAAe,GAAG,MAAM,IAAI,CAACR,sBAAsB,CAACQ,eAAe,CAAC;MACtEH,WAAW;MACXI,GAAG,EAAE;IACT,CAAC,CAAC;IAEF,IAAI,CAACD,eAAe,EAAE;MAClB,MAAM,IAAIE,+BAAkB,CAAC,CAAC;IAClC;IAEA,OAAO;MACH,GAAGN,MAAM;MACTC;IACJ,CAAC;EACL;AACJ;AAACM,OAAA,CAAAb,mCAAA,GAAAA,mCAAA","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import type { AcoFolderStorageOperations } from "../../folder.types";
2
2
  import { GetFolder } from "./GetFolder";
3
3
  import { GetFolderWithFolderLevelPermissions } from "./GetFolderWithFolderLevelPermissions";
4
- import { FolderLevelPermissions } from "../../../flp";
4
+ import type { FolderLevelPermissions } from "../../../flp";
5
5
  interface GetFolderUseCasesParams {
6
6
  getOperation: AcoFolderStorageOperations["getFolder"];
7
7
  folderLevelPermissions: FolderLevelPermissions;
@@ -1 +1 @@
1
- {"version":3,"names":["_GetFolder","require","_GetFolderWithFolderLevelPermissions","getGetFolderUseCase","params","getFolder","GetFolder","getOperation","getFolderUseCase","GetFolderWithFolderLevelPermissions","folderLevelPermissions","getFolderUseCaseWithoutPermissions","exports"],"sources":["index.ts"],"sourcesContent":["import type { AcoFolderStorageOperations } from \"~/folder/folder.types\";\nimport { GetFolder } from \"./GetFolder\";\nimport { GetFolderWithFolderLevelPermissions } from \"./GetFolderWithFolderLevelPermissions\";\nimport { FolderLevelPermissions } from \"~/flp\";\n\ninterface GetFolderUseCasesParams {\n getOperation: AcoFolderStorageOperations[\"getFolder\"];\n folderLevelPermissions: FolderLevelPermissions;\n}\n\nexport const getGetFolderUseCase = (params: GetFolderUseCasesParams) => {\n const getFolder = new GetFolder(params.getOperation);\n const getFolderUseCase = new GetFolderWithFolderLevelPermissions(\n params.folderLevelPermissions,\n getFolder\n );\n\n return {\n getFolderUseCase,\n getFolderUseCaseWithoutPermissions: getFolder\n };\n};\n"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,oCAAA,GAAAD,OAAA;AAQO,MAAME,mBAAmB,GAAIC,MAA+B,IAAK;EACpE,MAAMC,SAAS,GAAG,IAAIC,oBAAS,CAACF,MAAM,CAACG,YAAY,CAAC;EACpD,MAAMC,gBAAgB,GAAG,IAAIC,wEAAmC,CAC5DL,MAAM,CAACM,sBAAsB,EAC7BL,SACJ,CAAC;EAED,OAAO;IACHG,gBAAgB;IAChBG,kCAAkC,EAAEN;EACxC,CAAC;AACL,CAAC;AAACO,OAAA,CAAAT,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_GetFolder","require","_GetFolderWithFolderLevelPermissions","getGetFolderUseCase","params","getFolder","GetFolder","getOperation","getFolderUseCase","GetFolderWithFolderLevelPermissions","folderLevelPermissions","getFolderUseCaseWithoutPermissions","exports"],"sources":["index.ts"],"sourcesContent":["import type { AcoFolderStorageOperations } from \"~/folder/folder.types\";\nimport { GetFolder } from \"./GetFolder\";\nimport { GetFolderWithFolderLevelPermissions } from \"./GetFolderWithFolderLevelPermissions\";\nimport type { FolderLevelPermissions } from \"~/flp\";\n\ninterface GetFolderUseCasesParams {\n getOperation: AcoFolderStorageOperations[\"getFolder\"];\n folderLevelPermissions: FolderLevelPermissions;\n}\n\nexport const getGetFolderUseCase = (params: GetFolderUseCasesParams) => {\n const getFolder = new GetFolder(params.getOperation);\n const getFolderUseCase = new GetFolderWithFolderLevelPermissions(\n params.folderLevelPermissions,\n getFolder\n );\n\n return {\n getFolderUseCase,\n getFolderUseCaseWithoutPermissions: getFolder\n };\n};\n"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,oCAAA,GAAAD,OAAA;AAQO,MAAME,mBAAmB,GAAIC,MAA+B,IAAK;EACpE,MAAMC,SAAS,GAAG,IAAIC,oBAAS,CAACF,MAAM,CAACG,YAAY,CAAC;EACpD,MAAMC,gBAAgB,GAAG,IAAIC,wEAAmC,CAC5DL,MAAM,CAACM,sBAAsB,EAC7BL,SACJ,CAAC;EAED,OAAO;IACHG,gBAAgB;IAChBG,kCAAkC,EAAEN;EACxC,CAAC;AACL,CAAC;AAACO,OAAA,CAAAT,mBAAA,GAAAA,mBAAA","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { FolderLevelPermissions } from "../../../flp";
1
+ import type { FolderLevelPermissions } from "../../../flp";
2
2
  import type { IGetFolderHierarchy } from "./IGetFolderHierarchy";
3
3
  import type { Folder, GetFolderHierarchyParams } from "../../folder.types";
4
4
  export declare class GetFolderHierarchyWithFolderLevelPermissions implements IGetFolderHierarchy {
@@ -1 +1 @@
1
- {"version":3,"names":["GetFolderHierarchyWithFolderLevelPermissions","flpCatalog","Map","constructor","folderLevelPermissions","decoretee","execute","params","siblings","parents","folders","Promise","all","map","folder","hasFlp","id","permissions","getFolderLevelPermissions","setFlp","filterAccessibleFolders","results","getFlp","canAccess","canAccessFolder","rwd","filter","has","get","set","exports"],"sources":["GetFolderHierarchyWithFolderLevelPermissions.ts"],"sourcesContent":["import type { FolderPermission } from \"~/flp/flp.types\";\nimport { FolderLevelPermissions } from \"~/flp\";\nimport type { IGetFolderHierarchy } from \"./IGetFolderHierarchy\";\nimport type { Folder, GetFolderHierarchyParams } from \"~/folder/folder.types\";\n\nexport class GetFolderHierarchyWithFolderLevelPermissions implements IGetFolderHierarchy {\n private flpCatalog: Map<string, FolderPermission[]> = new Map();\n private folderLevelPermissions: FolderLevelPermissions;\n private readonly decoretee: IGetFolderHierarchy;\n\n constructor(folderLevelPermissions: FolderLevelPermissions, decoretee: IGetFolderHierarchy) {\n this.folderLevelPermissions = folderLevelPermissions;\n this.decoretee = decoretee;\n }\n\n async execute(params: GetFolderHierarchyParams) {\n const { siblings, parents } = await this.decoretee.execute(params);\n const folders = [...parents, ...siblings];\n\n await Promise.all(\n folders.map(async folder => {\n if (!this.hasFlp(folder.id)) {\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(\n folder.id\n );\n this.setFlp(folder.id, permissions);\n }\n })\n );\n\n return {\n parents: await this.filterAccessibleFolders(parents),\n siblings: await this.filterAccessibleFolders(siblings)\n };\n }\n\n private async filterAccessibleFolders(folders: Folder[]) {\n const results = await Promise.all(\n folders.map(async folder => {\n const permissions = this.getFlp(folder.id);\n if (!permissions) {\n return folder;\n }\n\n const canAccess = await this.folderLevelPermissions.canAccessFolder({\n permissions,\n rwd: \"r\"\n });\n\n return canAccess ? { ...folder, permissions } : null;\n })\n );\n return results.filter((folder): folder is Folder => folder !== null);\n }\n\n private hasFlp(id: string) {\n return this.flpCatalog.has(id);\n }\n\n private getFlp(id: string) {\n return this.flpCatalog.get(id);\n }\n\n private setFlp(id: string, permissions: FolderPermission[]) {\n this.flpCatalog.set(id, permissions);\n }\n}\n"],"mappings":";;;;;;AAKO,MAAMA,4CAA4C,CAAgC;EAC7EC,UAAU,GAAoC,IAAIC,GAAG,CAAC,CAAC;EAI/DC,WAAWA,CAACC,sBAA8C,EAAEC,SAA8B,EAAE;IACxF,IAAI,CAACD,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACC,SAAS,GAAGA,SAAS;EAC9B;EAEA,MAAMC,OAAOA,CAACC,MAAgC,EAAE;IAC5C,MAAM;MAAEC,QAAQ;MAAEC;IAAQ,CAAC,GAAG,MAAM,IAAI,CAACJ,SAAS,CAACC,OAAO,CAACC,MAAM,CAAC;IAClE,MAAMG,OAAO,GAAG,CAAC,GAAGD,OAAO,EAAE,GAAGD,QAAQ,CAAC;IAEzC,MAAMG,OAAO,CAACC,GAAG,CACbF,OAAO,CAACG,GAAG,CAAC,MAAMC,MAAM,IAAI;MACxB,IAAI,CAAC,IAAI,CAACC,MAAM,CAACD,MAAM,CAACE,EAAE,CAAC,EAAE;QACzB,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACb,sBAAsB,CAACc,yBAAyB,CAC3EJ,MAAM,CAACE,EACX,CAAC;QACD,IAAI,CAACG,MAAM,CAACL,MAAM,CAACE,EAAE,EAAEC,WAAW,CAAC;MACvC;IACJ,CAAC,CACL,CAAC;IAED,OAAO;MACHR,OAAO,EAAE,MAAM,IAAI,CAACW,uBAAuB,CAACX,OAAO,CAAC;MACpDD,QAAQ,EAAE,MAAM,IAAI,CAACY,uBAAuB,CAACZ,QAAQ;IACzD,CAAC;EACL;EAEA,MAAcY,uBAAuBA,CAACV,OAAiB,EAAE;IACrD,MAAMW,OAAO,GAAG,MAAMV,OAAO,CAACC,GAAG,CAC7BF,OAAO,CAACG,GAAG,CAAC,MAAMC,MAAM,IAAI;MACxB,MAAMG,WAAW,GAAG,IAAI,CAACK,MAAM,CAACR,MAAM,CAACE,EAAE,CAAC;MAC1C,IAAI,CAACC,WAAW,EAAE;QACd,OAAOH,MAAM;MACjB;MAEA,MAAMS,SAAS,GAAG,MAAM,IAAI,CAACnB,sBAAsB,CAACoB,eAAe,CAAC;QAChEP,WAAW;QACXQ,GAAG,EAAE;MACT,CAAC,CAAC;MAEF,OAAOF,SAAS,GAAG;QAAE,GAAGT,MAAM;QAAEG;MAAY,CAAC,GAAG,IAAI;IACxD,CAAC,CACL,CAAC;IACD,OAAOI,OAAO,CAACK,MAAM,CAAEZ,MAAM,IAAuBA,MAAM,KAAK,IAAI,CAAC;EACxE;EAEQC,MAAMA,CAACC,EAAU,EAAE;IACvB,OAAO,IAAI,CAACf,UAAU,CAAC0B,GAAG,CAACX,EAAE,CAAC;EAClC;EAEQM,MAAMA,CAACN,EAAU,EAAE;IACvB,OAAO,IAAI,CAACf,UAAU,CAAC2B,GAAG,CAACZ,EAAE,CAAC;EAClC;EAEQG,MAAMA,CAACH,EAAU,EAAEC,WAA+B,EAAE;IACxD,IAAI,CAAChB,UAAU,CAAC4B,GAAG,CAACb,EAAE,EAAEC,WAAW,CAAC;EACxC;AACJ;AAACa,OAAA,CAAA9B,4CAAA,GAAAA,4CAAA","ignoreList":[]}
1
+ {"version":3,"names":["GetFolderHierarchyWithFolderLevelPermissions","flpCatalog","Map","constructor","folderLevelPermissions","decoretee","execute","params","siblings","parents","folders","Promise","all","map","folder","hasFlp","id","permissions","getFolderLevelPermissions","setFlp","filterAccessibleFolders","results","getFlp","canAccess","canAccessFolder","rwd","filter","has","get","set","exports"],"sources":["GetFolderHierarchyWithFolderLevelPermissions.ts"],"sourcesContent":["import type { FolderPermission } from \"~/flp/flp.types\";\nimport type { FolderLevelPermissions } from \"~/flp\";\nimport type { IGetFolderHierarchy } from \"./IGetFolderHierarchy\";\nimport type { Folder, GetFolderHierarchyParams } from \"~/folder/folder.types\";\n\nexport class GetFolderHierarchyWithFolderLevelPermissions implements IGetFolderHierarchy {\n private flpCatalog: Map<string, FolderPermission[]> = new Map();\n private folderLevelPermissions: FolderLevelPermissions;\n private readonly decoretee: IGetFolderHierarchy;\n\n constructor(folderLevelPermissions: FolderLevelPermissions, decoretee: IGetFolderHierarchy) {\n this.folderLevelPermissions = folderLevelPermissions;\n this.decoretee = decoretee;\n }\n\n async execute(params: GetFolderHierarchyParams) {\n const { siblings, parents } = await this.decoretee.execute(params);\n const folders = [...parents, ...siblings];\n\n await Promise.all(\n folders.map(async folder => {\n if (!this.hasFlp(folder.id)) {\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(\n folder.id\n );\n this.setFlp(folder.id, permissions);\n }\n })\n );\n\n return {\n parents: await this.filterAccessibleFolders(parents),\n siblings: await this.filterAccessibleFolders(siblings)\n };\n }\n\n private async filterAccessibleFolders(folders: Folder[]) {\n const results = await Promise.all(\n folders.map(async folder => {\n const permissions = this.getFlp(folder.id);\n if (!permissions) {\n return folder;\n }\n\n const canAccess = await this.folderLevelPermissions.canAccessFolder({\n permissions,\n rwd: \"r\"\n });\n\n return canAccess ? { ...folder, permissions } : null;\n })\n );\n return results.filter((folder): folder is Folder => folder !== null);\n }\n\n private hasFlp(id: string) {\n return this.flpCatalog.has(id);\n }\n\n private getFlp(id: string) {\n return this.flpCatalog.get(id);\n }\n\n private setFlp(id: string, permissions: FolderPermission[]) {\n this.flpCatalog.set(id, permissions);\n }\n}\n"],"mappings":";;;;;;AAKO,MAAMA,4CAA4C,CAAgC;EAC7EC,UAAU,GAAoC,IAAIC,GAAG,CAAC,CAAC;EAI/DC,WAAWA,CAACC,sBAA8C,EAAEC,SAA8B,EAAE;IACxF,IAAI,CAACD,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACC,SAAS,GAAGA,SAAS;EAC9B;EAEA,MAAMC,OAAOA,CAACC,MAAgC,EAAE;IAC5C,MAAM;MAAEC,QAAQ;MAAEC;IAAQ,CAAC,GAAG,MAAM,IAAI,CAACJ,SAAS,CAACC,OAAO,CAACC,MAAM,CAAC;IAClE,MAAMG,OAAO,GAAG,CAAC,GAAGD,OAAO,EAAE,GAAGD,QAAQ,CAAC;IAEzC,MAAMG,OAAO,CAACC,GAAG,CACbF,OAAO,CAACG,GAAG,CAAC,MAAMC,MAAM,IAAI;MACxB,IAAI,CAAC,IAAI,CAACC,MAAM,CAACD,MAAM,CAACE,EAAE,CAAC,EAAE;QACzB,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACb,sBAAsB,CAACc,yBAAyB,CAC3EJ,MAAM,CAACE,EACX,CAAC;QACD,IAAI,CAACG,MAAM,CAACL,MAAM,CAACE,EAAE,EAAEC,WAAW,CAAC;MACvC;IACJ,CAAC,CACL,CAAC;IAED,OAAO;MACHR,OAAO,EAAE,MAAM,IAAI,CAACW,uBAAuB,CAACX,OAAO,CAAC;MACpDD,QAAQ,EAAE,MAAM,IAAI,CAACY,uBAAuB,CAACZ,QAAQ;IACzD,CAAC;EACL;EAEA,MAAcY,uBAAuBA,CAACV,OAAiB,EAAE;IACrD,MAAMW,OAAO,GAAG,MAAMV,OAAO,CAACC,GAAG,CAC7BF,OAAO,CAACG,GAAG,CAAC,MAAMC,MAAM,IAAI;MACxB,MAAMG,WAAW,GAAG,IAAI,CAACK,MAAM,CAACR,MAAM,CAACE,EAAE,CAAC;MAC1C,IAAI,CAACC,WAAW,EAAE;QACd,OAAOH,MAAM;MACjB;MAEA,MAAMS,SAAS,GAAG,MAAM,IAAI,CAACnB,sBAAsB,CAACoB,eAAe,CAAC;QAChEP,WAAW;QACXQ,GAAG,EAAE;MACT,CAAC,CAAC;MAEF,OAAOF,SAAS,GAAG;QAAE,GAAGT,MAAM;QAAEG;MAAY,CAAC,GAAG,IAAI;IACxD,CAAC,CACL,CAAC;IACD,OAAOI,OAAO,CAACK,MAAM,CAAEZ,MAAM,IAAuBA,MAAM,KAAK,IAAI,CAAC;EACxE;EAEQC,MAAMA,CAACC,EAAU,EAAE;IACvB,OAAO,IAAI,CAACf,UAAU,CAAC0B,GAAG,CAACX,EAAE,CAAC;EAClC;EAEQM,MAAMA,CAACN,EAAU,EAAE;IACvB,OAAO,IAAI,CAACf,UAAU,CAAC2B,GAAG,CAACZ,EAAE,CAAC;EAClC;EAEQG,MAAMA,CAACH,EAAU,EAAEC,WAA+B,EAAE;IACxD,IAAI,CAAChB,UAAU,CAAC4B,GAAG,CAACb,EAAE,EAAEC,WAAW,CAAC;EACxC;AACJ;AAACa,OAAA,CAAA9B,4CAAA,GAAAA,4CAAA","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import { GetFolderHierarchyWithFolderLevelPermissions } from "./GetFolderHierarchyWithFolderLevelPermissions";
2
2
  import type { AcoFolderStorageOperations } from "../../folder.types";
3
- import { FolderLevelPermissions } from "../../../flp";
3
+ import type { FolderLevelPermissions } from "../../../flp";
4
4
  interface GetFolderHierarchyUseCasesParams {
5
5
  listOperation: AcoFolderStorageOperations["listFolders"];
6
6
  getOperation: AcoFolderStorageOperations["getFolder"];
@@ -1 +1 @@
1
- {"version":3,"names":["_GetFolderHierarchy","require","_GetFolderHierarchyWithFolderLevelPermissions","getGetFolderHierarchyUseCases","params","getFolderHierarchy","GetFolderHierarchy","listOperation","getOperation","getFolderHierarchyUseCase","GetFolderHierarchyWithFolderLevelPermissions","folderLevelPermissions","exports"],"sources":["index.ts"],"sourcesContent":["import { GetFolderHierarchy } from \"./GetFolderHierarchy\";\nimport { GetFolderHierarchyWithFolderLevelPermissions } from \"./GetFolderHierarchyWithFolderLevelPermissions\";\nimport type { AcoFolderStorageOperations } from \"~/folder/folder.types\";\nimport { FolderLevelPermissions } from \"~/flp\";\n\ninterface GetFolderHierarchyUseCasesParams {\n listOperation: AcoFolderStorageOperations[\"listFolders\"];\n getOperation: AcoFolderStorageOperations[\"getFolder\"];\n folderLevelPermissions: FolderLevelPermissions;\n}\n\nexport const getGetFolderHierarchyUseCases = (params: GetFolderHierarchyUseCasesParams) => {\n const getFolderHierarchy = new GetFolderHierarchy(params.listOperation, params.getOperation);\n const getFolderHierarchyUseCase = new GetFolderHierarchyWithFolderLevelPermissions(\n params.folderLevelPermissions,\n getFolderHierarchy\n );\n\n return {\n getFolderHierarchyUseCase\n };\n};\n"],"mappings":";;;;;;AAAA,IAAAA,mBAAA,GAAAC,OAAA;AACA,IAAAC,6CAAA,GAAAD,OAAA;AAUO,MAAME,6BAA6B,GAAIC,MAAwC,IAAK;EACvF,MAAMC,kBAAkB,GAAG,IAAIC,sCAAkB,CAACF,MAAM,CAACG,aAAa,EAAEH,MAAM,CAACI,YAAY,CAAC;EAC5F,MAAMC,yBAAyB,GAAG,IAAIC,0FAA4C,CAC9EN,MAAM,CAACO,sBAAsB,EAC7BN,kBACJ,CAAC;EAED,OAAO;IACHI;EACJ,CAAC;AACL,CAAC;AAACG,OAAA,CAAAT,6BAAA,GAAAA,6BAAA","ignoreList":[]}
1
+ {"version":3,"names":["_GetFolderHierarchy","require","_GetFolderHierarchyWithFolderLevelPermissions","getGetFolderHierarchyUseCases","params","getFolderHierarchy","GetFolderHierarchy","listOperation","getOperation","getFolderHierarchyUseCase","GetFolderHierarchyWithFolderLevelPermissions","folderLevelPermissions","exports"],"sources":["index.ts"],"sourcesContent":["import { GetFolderHierarchy } from \"./GetFolderHierarchy\";\nimport { GetFolderHierarchyWithFolderLevelPermissions } from \"./GetFolderHierarchyWithFolderLevelPermissions\";\nimport type { AcoFolderStorageOperations } from \"~/folder/folder.types\";\nimport type { FolderLevelPermissions } from \"~/flp\";\n\ninterface GetFolderHierarchyUseCasesParams {\n listOperation: AcoFolderStorageOperations[\"listFolders\"];\n getOperation: AcoFolderStorageOperations[\"getFolder\"];\n folderLevelPermissions: FolderLevelPermissions;\n}\n\nexport const getGetFolderHierarchyUseCases = (params: GetFolderHierarchyUseCasesParams) => {\n const getFolderHierarchy = new GetFolderHierarchy(params.listOperation, params.getOperation);\n const getFolderHierarchyUseCase = new GetFolderHierarchyWithFolderLevelPermissions(\n params.folderLevelPermissions,\n getFolderHierarchy\n );\n\n return {\n getFolderHierarchyUseCase\n };\n};\n"],"mappings":";;;;;;AAAA,IAAAA,mBAAA,GAAAC,OAAA;AACA,IAAAC,6CAAA,GAAAD,OAAA;AAUO,MAAME,6BAA6B,GAAIC,MAAwC,IAAK;EACvF,MAAMC,kBAAkB,GAAG,IAAIC,sCAAkB,CAACF,MAAM,CAACG,aAAa,EAAEH,MAAM,CAACI,YAAY,CAAC;EAC5F,MAAMC,yBAAyB,GAAG,IAAIC,0FAA4C,CAC9EN,MAAM,CAACO,sBAAsB,EAC7BN,kBACJ,CAAC;EAED,OAAO;IACHI;EACJ,CAAC;AACL,CAAC;AAACG,OAAA,CAAAT,6BAAA,GAAAA,6BAAA","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import type { Folder, ListFoldersParams } from "../../folder.types";
2
- import { ListMeta } from "../../../types";
2
+ import type { ListMeta } from "../../../types";
3
3
  export interface IListFolders {
4
4
  execute: (params: ListFoldersParams) => Promise<[Folder[], ListMeta]>;
5
5
  }
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["IListFolders.ts"],"sourcesContent":["import type { Folder, ListFoldersParams } from \"~/folder/folder.types\";\nimport { ListMeta } from \"~/types\";\n\nexport interface IListFolders {\n execute: (params: ListFoldersParams) => Promise<[Folder[], ListMeta]>;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["IListFolders.ts"],"sourcesContent":["import type { Folder, ListFoldersParams } from \"~/folder/folder.types\";\nimport type { ListMeta } from \"~/types\";\n\nexport interface IListFolders {\n execute: (params: ListFoldersParams) => Promise<[Folder[], ListMeta]>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import type { IListFolders } from "./IListFolders";
2
2
  import type { AcoFolderStorageOperations, Folder, ListFoldersParams } from "../../folder.types";
3
- import { ListMeta } from "../../../types";
3
+ import type { ListMeta } from "../../../types";
4
4
  export declare class ListFolders implements IListFolders {
5
5
  private readonly listOperation;
6
6
  constructor(listOperation: AcoFolderStorageOperations["listFolders"]);
@@ -1 +1 @@
1
- {"version":3,"names":["ListFolders","constructor","listOperation","execute","params","exports"],"sources":["ListFolders.ts"],"sourcesContent":["import type { IListFolders } from \"./IListFolders\";\nimport type { AcoFolderStorageOperations, Folder, ListFoldersParams } from \"~/folder/folder.types\";\nimport { ListMeta } from \"~/types\";\n\nexport class ListFolders implements IListFolders {\n private readonly listOperation: AcoFolderStorageOperations[\"listFolders\"];\n\n constructor(listOperation: AcoFolderStorageOperations[\"listFolders\"]) {\n this.listOperation = listOperation;\n }\n\n async execute(params: ListFoldersParams): Promise<[Folder[], ListMeta]> {\n return await this.listOperation(params);\n }\n}\n"],"mappings":";;;;;;AAIO,MAAMA,WAAW,CAAyB;EAG7CC,WAAWA,CAACC,aAAwD,EAAE;IAClE,IAAI,CAACA,aAAa,GAAGA,aAAa;EACtC;EAEA,MAAMC,OAAOA,CAACC,MAAyB,EAAiC;IACpE,OAAO,MAAM,IAAI,CAACF,aAAa,CAACE,MAAM,CAAC;EAC3C;AACJ;AAACC,OAAA,CAAAL,WAAA,GAAAA,WAAA","ignoreList":[]}
1
+ {"version":3,"names":["ListFolders","constructor","listOperation","execute","params","exports"],"sources":["ListFolders.ts"],"sourcesContent":["import type { IListFolders } from \"./IListFolders\";\nimport type { AcoFolderStorageOperations, Folder, ListFoldersParams } from \"~/folder/folder.types\";\nimport type { ListMeta } from \"~/types\";\n\nexport class ListFolders implements IListFolders {\n private readonly listOperation: AcoFolderStorageOperations[\"listFolders\"];\n\n constructor(listOperation: AcoFolderStorageOperations[\"listFolders\"]) {\n this.listOperation = listOperation;\n }\n\n async execute(params: ListFoldersParams): Promise<[Folder[], ListMeta]> {\n return await this.listOperation(params);\n }\n}\n"],"mappings":";;;;;;AAIO,MAAMA,WAAW,CAAyB;EAG7CC,WAAWA,CAACC,aAAwD,EAAE;IAClE,IAAI,CAACA,aAAa,GAAGA,aAAa;EACtC;EAEA,MAAMC,OAAOA,CAACC,MAAyB,EAAiC;IACpE,OAAO,MAAM,IAAI,CAACF,aAAa,CAACE,MAAM,CAAC;EAC3C;AACJ;AAACC,OAAA,CAAAL,WAAA,GAAAA,WAAA","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import type { Folder, ListFoldersParams } from "../../folder.types";
2
2
  import type { IListFolders } from "./IListFolders";
3
- import { FolderLevelPermissions } from "../../../flp";
3
+ import type { FolderLevelPermissions } from "../../../flp";
4
4
  import type { ListMeta } from "../../../types";
5
5
  export declare class ListFoldersWithFolderLevelPermissions implements IListFolders {
6
6
  private flpCatalog;
@@ -1 +1 @@
1
- {"version":3,"names":["_constants","require","ListFoldersWithFolderLevelPermissions","flpCatalog","Map","constructor","folderLevelPermissions","decoretee","execute","params","folders","meta","rootFlps","listFolderLevelPermissions","where","type","parentId","ROOT_FOLDER","forEach","flp","setFlp","id","permissions","Promise","all","map","folder","hasFlp","getFolderLevelPermissions","foldersWithPermissions","getFlp","canAccessFolder","rwd","folderWithFlp","filter","Boolean","has","get","set","exports"],"sources":["ListFoldersWithFolderLevelPermissions.ts"],"sourcesContent":["import type { Folder, ListFoldersParams } from \"~/folder/folder.types\";\nimport type { IListFolders } from \"./IListFolders\";\nimport { FolderLevelPermissions } from \"~/flp\";\nimport type { FolderPermission } from \"~/flp/flp.types\";\nimport { ROOT_FOLDER } from \"~/constants\";\nimport type { ListMeta } from \"~/types\";\n\nexport class ListFoldersWithFolderLevelPermissions implements IListFolders {\n private flpCatalog: Map<string, FolderPermission[]> = new Map();\n private folderLevelPermissions: FolderLevelPermissions;\n private readonly decoretee: IListFolders;\n\n constructor(folderLevelPermissions: FolderLevelPermissions, decoretee: IListFolders) {\n this.folderLevelPermissions = folderLevelPermissions;\n this.decoretee = decoretee;\n }\n\n async execute(params: ListFoldersParams): Promise<[Folder[], ListMeta]> {\n const [folders, meta] = await this.decoretee.execute(params);\n\n // Fetch FLP records for ROOT folders and populate the catalog.\n const rootFlps = await this.folderLevelPermissions.listFolderLevelPermissions({\n where: {\n type: params.where.type,\n parentId: ROOT_FOLDER\n }\n });\n\n rootFlps.forEach(flp => this.setFlp(flp.id, flp.permissions));\n\n // Fetch FLP for folders not already in the catalog.\n await Promise.all(\n folders.map(async folder => {\n if (!this.hasFlp(folder.id)) {\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(\n folder.id\n );\n this.setFlp(folder.id, permissions);\n }\n })\n );\n\n // Filter folders based on permissions.\n const foldersWithPermissions = await Promise.all(\n folders.map(async folder => {\n const permissions = this.getFlp(folder.id);\n if (!permissions) {\n return null;\n }\n\n const canAccessFolder = await this.folderLevelPermissions.canAccessFolder({\n permissions,\n rwd: \"r\"\n });\n\n if (!canAccessFolder) {\n return null;\n }\n\n const folderWithFlp = { ...folder, permissions };\n return canAccessFolder ? folderWithFlp : null;\n })\n );\n\n return [foldersWithPermissions.filter(Boolean) as Folder[], meta];\n }\n\n private hasFlp(id: string) {\n return this.flpCatalog.has(id);\n }\n\n private getFlp(id: string) {\n return this.flpCatalog.get(id);\n }\n\n private setFlp(id: string, permissions: FolderPermission[]) {\n this.flpCatalog.set(id, permissions);\n }\n}\n"],"mappings":";;;;;;AAIA,IAAAA,UAAA,GAAAC,OAAA;AAGO,MAAMC,qCAAqC,CAAyB;EAC/DC,UAAU,GAAoC,IAAIC,GAAG,CAAC,CAAC;EAI/DC,WAAWA,CAACC,sBAA8C,EAAEC,SAAuB,EAAE;IACjF,IAAI,CAACD,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACC,SAAS,GAAGA,SAAS;EAC9B;EAEA,MAAMC,OAAOA,CAACC,MAAyB,EAAiC;IACpE,MAAM,CAACC,OAAO,EAAEC,IAAI,CAAC,GAAG,MAAM,IAAI,CAACJ,SAAS,CAACC,OAAO,CAACC,MAAM,CAAC;;IAE5D;IACA,MAAMG,QAAQ,GAAG,MAAM,IAAI,CAACN,sBAAsB,CAACO,0BAA0B,CAAC;MAC1EC,KAAK,EAAE;QACHC,IAAI,EAAEN,MAAM,CAACK,KAAK,CAACC,IAAI;QACvBC,QAAQ,EAAEC;MACd;IACJ,CAAC,CAAC;IAEFL,QAAQ,CAACM,OAAO,CAACC,GAAG,IAAI,IAAI,CAACC,MAAM,CAACD,GAAG,CAACE,EAAE,EAAEF,GAAG,CAACG,WAAW,CAAC,CAAC;;IAE7D;IACA,MAAMC,OAAO,CAACC,GAAG,CACbd,OAAO,CAACe,GAAG,CAAC,MAAMC,MAAM,IAAI;MACxB,IAAI,CAAC,IAAI,CAACC,MAAM,CAACD,MAAM,CAACL,EAAE,CAAC,EAAE;QACzB,MAAMC,WAAW,GAAG,MAAM,IAAI,CAAChB,sBAAsB,CAACsB,yBAAyB,CAC3EF,MAAM,CAACL,EACX,CAAC;QACD,IAAI,CAACD,MAAM,CAACM,MAAM,CAACL,EAAE,EAAEC,WAAW,CAAC;MACvC;IACJ,CAAC,CACL,CAAC;;IAED;IACA,MAAMO,sBAAsB,GAAG,MAAMN,OAAO,CAACC,GAAG,CAC5Cd,OAAO,CAACe,GAAG,CAAC,MAAMC,MAAM,IAAI;MACxB,MAAMJ,WAAW,GAAG,IAAI,CAACQ,MAAM,CAACJ,MAAM,CAACL,EAAE,CAAC;MAC1C,IAAI,CAACC,WAAW,EAAE;QACd,OAAO,IAAI;MACf;MAEA,MAAMS,eAAe,GAAG,MAAM,IAAI,CAACzB,sBAAsB,CAACyB,eAAe,CAAC;QACtET,WAAW;QACXU,GAAG,EAAE;MACT,CAAC,CAAC;MAEF,IAAI,CAACD,eAAe,EAAE;QAClB,OAAO,IAAI;MACf;MAEA,MAAME,aAAa,GAAG;QAAE,GAAGP,MAAM;QAAEJ;MAAY,CAAC;MAChD,OAAOS,eAAe,GAAGE,aAAa,GAAG,IAAI;IACjD,CAAC,CACL,CAAC;IAED,OAAO,CAACJ,sBAAsB,CAACK,MAAM,CAACC,OAAO,CAAC,EAAcxB,IAAI,CAAC;EACrE;EAEQgB,MAAMA,CAACN,EAAU,EAAE;IACvB,OAAO,IAAI,CAAClB,UAAU,CAACiC,GAAG,CAACf,EAAE,CAAC;EAClC;EAEQS,MAAMA,CAACT,EAAU,EAAE;IACvB,OAAO,IAAI,CAAClB,UAAU,CAACkC,GAAG,CAAChB,EAAE,CAAC;EAClC;EAEQD,MAAMA,CAACC,EAAU,EAAEC,WAA+B,EAAE;IACxD,IAAI,CAACnB,UAAU,CAACmC,GAAG,CAACjB,EAAE,EAAEC,WAAW,CAAC;EACxC;AACJ;AAACiB,OAAA,CAAArC,qCAAA,GAAAA,qCAAA","ignoreList":[]}
1
+ {"version":3,"names":["_constants","require","ListFoldersWithFolderLevelPermissions","flpCatalog","Map","constructor","folderLevelPermissions","decoretee","execute","params","folders","meta","rootFlps","listFolderLevelPermissions","where","type","parentId","ROOT_FOLDER","forEach","flp","setFlp","id","permissions","Promise","all","map","folder","hasFlp","getFolderLevelPermissions","foldersWithPermissions","getFlp","canAccessFolder","rwd","folderWithFlp","filter","Boolean","has","get","set","exports"],"sources":["ListFoldersWithFolderLevelPermissions.ts"],"sourcesContent":["import type { Folder, ListFoldersParams } from \"~/folder/folder.types\";\nimport type { IListFolders } from \"./IListFolders\";\nimport type { FolderLevelPermissions } from \"~/flp\";\nimport type { FolderPermission } from \"~/flp/flp.types\";\nimport { ROOT_FOLDER } from \"~/constants\";\nimport type { ListMeta } from \"~/types\";\n\nexport class ListFoldersWithFolderLevelPermissions implements IListFolders {\n private flpCatalog: Map<string, FolderPermission[]> = new Map();\n private folderLevelPermissions: FolderLevelPermissions;\n private readonly decoretee: IListFolders;\n\n constructor(folderLevelPermissions: FolderLevelPermissions, decoretee: IListFolders) {\n this.folderLevelPermissions = folderLevelPermissions;\n this.decoretee = decoretee;\n }\n\n async execute(params: ListFoldersParams): Promise<[Folder[], ListMeta]> {\n const [folders, meta] = await this.decoretee.execute(params);\n\n // Fetch FLP records for ROOT folders and populate the catalog.\n const rootFlps = await this.folderLevelPermissions.listFolderLevelPermissions({\n where: {\n type: params.where.type,\n parentId: ROOT_FOLDER\n }\n });\n\n rootFlps.forEach(flp => this.setFlp(flp.id, flp.permissions));\n\n // Fetch FLP for folders not already in the catalog.\n await Promise.all(\n folders.map(async folder => {\n if (!this.hasFlp(folder.id)) {\n const permissions = await this.folderLevelPermissions.getFolderLevelPermissions(\n folder.id\n );\n this.setFlp(folder.id, permissions);\n }\n })\n );\n\n // Filter folders based on permissions.\n const foldersWithPermissions = await Promise.all(\n folders.map(async folder => {\n const permissions = this.getFlp(folder.id);\n if (!permissions) {\n return null;\n }\n\n const canAccessFolder = await this.folderLevelPermissions.canAccessFolder({\n permissions,\n rwd: \"r\"\n });\n\n if (!canAccessFolder) {\n return null;\n }\n\n const folderWithFlp = { ...folder, permissions };\n return canAccessFolder ? folderWithFlp : null;\n })\n );\n\n return [foldersWithPermissions.filter(Boolean) as Folder[], meta];\n }\n\n private hasFlp(id: string) {\n return this.flpCatalog.has(id);\n }\n\n private getFlp(id: string) {\n return this.flpCatalog.get(id);\n }\n\n private setFlp(id: string, permissions: FolderPermission[]) {\n this.flpCatalog.set(id, permissions);\n }\n}\n"],"mappings":";;;;;;AAIA,IAAAA,UAAA,GAAAC,OAAA;AAGO,MAAMC,qCAAqC,CAAyB;EAC/DC,UAAU,GAAoC,IAAIC,GAAG,CAAC,CAAC;EAI/DC,WAAWA,CAACC,sBAA8C,EAAEC,SAAuB,EAAE;IACjF,IAAI,CAACD,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACC,SAAS,GAAGA,SAAS;EAC9B;EAEA,MAAMC,OAAOA,CAACC,MAAyB,EAAiC;IACpE,MAAM,CAACC,OAAO,EAAEC,IAAI,CAAC,GAAG,MAAM,IAAI,CAACJ,SAAS,CAACC,OAAO,CAACC,MAAM,CAAC;;IAE5D;IACA,MAAMG,QAAQ,GAAG,MAAM,IAAI,CAACN,sBAAsB,CAACO,0BAA0B,CAAC;MAC1EC,KAAK,EAAE;QACHC,IAAI,EAAEN,MAAM,CAACK,KAAK,CAACC,IAAI;QACvBC,QAAQ,EAAEC;MACd;IACJ,CAAC,CAAC;IAEFL,QAAQ,CAACM,OAAO,CAACC,GAAG,IAAI,IAAI,CAACC,MAAM,CAACD,GAAG,CAACE,EAAE,EAAEF,GAAG,CAACG,WAAW,CAAC,CAAC;;IAE7D;IACA,MAAMC,OAAO,CAACC,GAAG,CACbd,OAAO,CAACe,GAAG,CAAC,MAAMC,MAAM,IAAI;MACxB,IAAI,CAAC,IAAI,CAACC,MAAM,CAACD,MAAM,CAACL,EAAE,CAAC,EAAE;QACzB,MAAMC,WAAW,GAAG,MAAM,IAAI,CAAChB,sBAAsB,CAACsB,yBAAyB,CAC3EF,MAAM,CAACL,EACX,CAAC;QACD,IAAI,CAACD,MAAM,CAACM,MAAM,CAACL,EAAE,EAAEC,WAAW,CAAC;MACvC;IACJ,CAAC,CACL,CAAC;;IAED;IACA,MAAMO,sBAAsB,GAAG,MAAMN,OAAO,CAACC,GAAG,CAC5Cd,OAAO,CAACe,GAAG,CAAC,MAAMC,MAAM,IAAI;MACxB,MAAMJ,WAAW,GAAG,IAAI,CAACQ,MAAM,CAACJ,MAAM,CAACL,EAAE,CAAC;MAC1C,IAAI,CAACC,WAAW,EAAE;QACd,OAAO,IAAI;MACf;MAEA,MAAMS,eAAe,GAAG,MAAM,IAAI,CAACzB,sBAAsB,CAACyB,eAAe,CAAC;QACtET,WAAW;QACXU,GAAG,EAAE;MACT,CAAC,CAAC;MAEF,IAAI,CAACD,eAAe,EAAE;QAClB,OAAO,IAAI;MACf;MAEA,MAAME,aAAa,GAAG;QAAE,GAAGP,MAAM;QAAEJ;MAAY,CAAC;MAChD,OAAOS,eAAe,GAAGE,aAAa,GAAG,IAAI;IACjD,CAAC,CACL,CAAC;IAED,OAAO,CAACJ,sBAAsB,CAACK,MAAM,CAACC,OAAO,CAAC,EAAcxB,IAAI,CAAC;EACrE;EAEQgB,MAAMA,CAACN,EAAU,EAAE;IACvB,OAAO,IAAI,CAAClB,UAAU,CAACiC,GAAG,CAACf,EAAE,CAAC;EAClC;EAEQS,MAAMA,CAACT,EAAU,EAAE;IACvB,OAAO,IAAI,CAAClB,UAAU,CAACkC,GAAG,CAAChB,EAAE,CAAC;EAClC;EAEQD,MAAMA,CAACC,EAAU,EAAEC,WAA+B,EAAE;IACxD,IAAI,CAACnB,UAAU,CAACmC,GAAG,CAACjB,EAAE,EAAEC,WAAW,CAAC;EACxC;AACJ;AAACiB,OAAA,CAAArC,qCAAA,GAAAA,qCAAA","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import type { AcoFolderStorageOperations } from "../../folder.types";
2
2
  import { ListFolders } from "./ListFolders";
3
3
  import { ListFoldersWithFolderLevelPermissions } from "./ListFoldersWithFolderLevelPermissions";
4
- import { FolderLevelPermissions } from "../../../flp";
4
+ import type { FolderLevelPermissions } from "../../../flp";
5
5
  interface ListFoldersUseCasesParams {
6
6
  listOperation: AcoFolderStorageOperations["listFolders"];
7
7
  folderLevelPermissions: FolderLevelPermissions;
@@ -1 +1 @@
1
- {"version":3,"names":["_ListFolders","require","_ListFoldersWithFolderLevelPermissions","getListFoldersUseCases","params","listFolders","ListFolders","listOperation","listFoldersUseCase","ListFoldersWithFolderLevelPermissions","folderLevelPermissions","listFoldersUseCaseWithoutPermissions","exports"],"sources":["index.ts"],"sourcesContent":["import type { AcoFolderStorageOperations } from \"~/folder/folder.types\";\nimport { ListFolders } from \"./ListFolders\";\nimport { ListFoldersWithFolderLevelPermissions } from \"./ListFoldersWithFolderLevelPermissions\";\nimport { FolderLevelPermissions } from \"~/flp\";\n\ninterface ListFoldersUseCasesParams {\n listOperation: AcoFolderStorageOperations[\"listFolders\"];\n folderLevelPermissions: FolderLevelPermissions;\n}\n\nexport const getListFoldersUseCases = (params: ListFoldersUseCasesParams) => {\n const listFolders = new ListFolders(params.listOperation);\n const listFoldersUseCase = new ListFoldersWithFolderLevelPermissions(\n params.folderLevelPermissions,\n listFolders\n );\n\n return {\n listFoldersUseCase,\n listFoldersUseCaseWithoutPermissions: listFolders\n };\n};\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,sCAAA,GAAAD,OAAA;AAQO,MAAME,sBAAsB,GAAIC,MAAiC,IAAK;EACzE,MAAMC,WAAW,GAAG,IAAIC,wBAAW,CAACF,MAAM,CAACG,aAAa,CAAC;EACzD,MAAMC,kBAAkB,GAAG,IAAIC,4EAAqC,CAChEL,MAAM,CAACM,sBAAsB,EAC7BL,WACJ,CAAC;EAED,OAAO;IACHG,kBAAkB;IAClBG,oCAAoC,EAAEN;EAC1C,CAAC;AACL,CAAC;AAACO,OAAA,CAAAT,sBAAA,GAAAA,sBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_ListFolders","require","_ListFoldersWithFolderLevelPermissions","getListFoldersUseCases","params","listFolders","ListFolders","listOperation","listFoldersUseCase","ListFoldersWithFolderLevelPermissions","folderLevelPermissions","listFoldersUseCaseWithoutPermissions","exports"],"sources":["index.ts"],"sourcesContent":["import type { AcoFolderStorageOperations } from \"~/folder/folder.types\";\nimport { ListFolders } from \"./ListFolders\";\nimport { ListFoldersWithFolderLevelPermissions } from \"./ListFoldersWithFolderLevelPermissions\";\nimport type { FolderLevelPermissions } from \"~/flp\";\n\ninterface ListFoldersUseCasesParams {\n listOperation: AcoFolderStorageOperations[\"listFolders\"];\n folderLevelPermissions: FolderLevelPermissions;\n}\n\nexport const getListFoldersUseCases = (params: ListFoldersUseCasesParams) => {\n const listFolders = new ListFolders(params.listOperation);\n const listFoldersUseCase = new ListFoldersWithFolderLevelPermissions(\n params.folderLevelPermissions,\n listFolders\n );\n\n return {\n listFoldersUseCase,\n listFoldersUseCaseWithoutPermissions: listFolders\n };\n};\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,sCAAA,GAAAD,OAAA;AAQO,MAAME,sBAAsB,GAAIC,MAAiC,IAAK;EACzE,MAAMC,WAAW,GAAG,IAAIC,wBAAW,CAACF,MAAM,CAACG,aAAa,CAAC;EACzD,MAAMC,kBAAkB,GAAG,IAAIC,4EAAqC,CAChEL,MAAM,CAACM,sBAAsB,EAC7BL,WACJ,CAAC;EAED,OAAO;IACHG,kBAAkB;IAClBG,oCAAoC,EAAEN;EAC1C,CAAC;AACL,CAAC;AAACO,OAAA,CAAAT,sBAAA,GAAAA,sBAAA","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import type { AcoFolderStorageOperations, UpdateFolderParams } from "../../folder.types";
2
2
  import type { IUpdateFolder } from "./IUpdateFolder";
3
- import { FolderLevelPermissions } from "../../../flp";
3
+ import type { FolderLevelPermissions } from "../../../flp";
4
4
  export declare class UpdateFolderWithFolderLevelPermissions implements IUpdateFolder {
5
5
  private folderLevelPermissions;
6
6
  private readonly getOperation;
@@ -55,7 +55,7 @@ class UpdateFolderWithFolderLevelPermissions {
55
55
  const parentPermissions = await this.folderLevelPermissions.getFolderLevelPermissions(params.parentId);
56
56
  await this.folderLevelPermissions.ensureCanAccessFolder({
57
57
  permissions: parentPermissions,
58
- rwd: "w"
58
+ rwd: "r"
59
59
  });
60
60
  } catch (e) {
61
61
  if (e instanceof _apiSecurity.NotAuthorizedError) {
@@ -1 +1 @@
1
- {"version":3,"names":["_apiSecurity","require","_error","_interopRequireDefault","UpdateFolderWithFolderLevelPermissions","constructor","folderLevelPermissions","getOperation","decoretee","execute","id","params","original","originalPermissions","getFolderLevelPermissions","ensureCanAccessFolder","permissions","rwd","getDefaultPermissions","stillHasAccess","canAccessFolder","WError","Array","isArray","forEach","permission","targetIsValid","target","startsWith","Error","inheritedFrom","parentId","parentPermissions","e","NotAuthorizedError","folder","exports"],"sources":["UpdateFolderWithFolderLevelPermissions.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport WError from \"@webiny/error\";\nimport type { AcoFolderStorageOperations, UpdateFolderParams } from \"~/folder/folder.types\";\nimport type { IUpdateFolder } from \"./IUpdateFolder\";\nimport { FolderLevelPermissions } from \"~/flp\";\n\nexport class UpdateFolderWithFolderLevelPermissions implements IUpdateFolder {\n private folderLevelPermissions: FolderLevelPermissions;\n private readonly getOperation: AcoFolderStorageOperations[\"getFolder\"];\n private readonly decoretee: IUpdateFolder;\n\n constructor(\n folderLevelPermissions: FolderLevelPermissions,\n getOperation: AcoFolderStorageOperations[\"getFolder\"],\n decoretee: IUpdateFolder\n ) {\n this.folderLevelPermissions = folderLevelPermissions;\n this.getOperation = getOperation;\n this.decoretee = decoretee;\n }\n\n async execute(id: string, params: UpdateFolderParams) {\n const original = await this.getOperation({ id });\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 throw new WError(\n `Cannot continue because you would loose access to this folder.`,\n \"CANNOT_LOOSE_FOLDER_ACCESS\"\n );\n }\n\n // Validate data.\n if (Array.isArray(params.permissions)) {\n params.permissions.forEach(permission => {\n const targetIsValid =\n permission.target.startsWith(\"admin:\") || permission.target.startsWith(\"team:\");\n if (!targetIsValid) {\n throw new Error(`Permission target \"${permission.target}\" is not valid.`);\n }\n\n if (permission.inheritedFrom) {\n throw new Error(`Permission \"inheritedFrom\" cannot be set manually.`);\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 try {\n // Getting the parent folder permissions will throw an error if the user doesn't have access.\n const parentPermissions =\n await this.folderLevelPermissions.getFolderLevelPermissions(params.parentId);\n\n await this.folderLevelPermissions.ensureCanAccessFolder({\n permissions: parentPermissions,\n rwd: \"w\"\n });\n } catch (e) {\n if (e instanceof NotAuthorizedError) {\n throw new WError(\n `Cannot move folder to a new parent because you don't have access to the new parent.`,\n \"CANNOT_MOVE_FOLDER_TO_NEW_PARENT\"\n );\n }\n\n // If we didn't receive the expected error, we still want to throw it.\n throw e;\n }\n }\n\n const folder = await this.decoretee.execute(id, params);\n\n return {\n ...folder,\n permissions\n };\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AAKO,MAAMG,sCAAsC,CAA0B;EAKzEC,WAAWA,CACPC,sBAA8C,EAC9CC,YAAqD,EACrDC,SAAwB,EAC1B;IACE,IAAI,CAACF,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACC,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACC,SAAS,GAAGA,SAAS;EAC9B;EAEA,MAAMC,OAAOA,CAACC,EAAU,EAAEC,MAA0B,EAAE;IAClD,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACL,YAAY,CAAC;MAAEG;IAAG,CAAC,CAAC;IAChD,MAAMG,mBAAmB,GAAG,MAAM,IAAI,CAACP,sBAAsB,CAACQ,yBAAyB,CAACJ,EAAE,CAAC;;IAE3F;IACA,MAAM,IAAI,CAACJ,sBAAsB,CAACS,qBAAqB,CAAC;MACpDC,WAAW,EAAEH,mBAAmB;MAChCI,GAAG,EAAE;IACT,CAAC,CAAC;IAEF,MAAMD,WAAW,GAAG,MAAM,IAAI,CAACV,sBAAsB,CAACY,qBAAqB,CACvEP,MAAM,CAACK,WAAW,IAAI,EAC1B,CAAC;;IAED;IACA,MAAMG,cAAc,GAAG,MAAM,IAAI,CAACb,sBAAsB,CAACc,eAAe,CAAC;MACrEJ,WAAW;MACXC,GAAG,EAAE;IACT,CAAC,CAAC;IAEF,IAAI,CAACE,cAAc,EAAE;MACjB,MAAM,IAAIE,cAAM,CACZ,gEAAgE,EAChE,4BACJ,CAAC;IACL;;IAEA;IACA,IAAIC,KAAK,CAACC,OAAO,CAACZ,MAAM,CAACK,WAAW,CAAC,EAAE;MACnCL,MAAM,CAACK,WAAW,CAACQ,OAAO,CAACC,UAAU,IAAI;QACrC,MAAMC,aAAa,GACfD,UAAU,CAACE,MAAM,CAACC,UAAU,CAAC,QAAQ,CAAC,IAAIH,UAAU,CAACE,MAAM,CAACC,UAAU,CAAC,OAAO,CAAC;QACnF,IAAI,CAACF,aAAa,EAAE;UAChB,MAAM,IAAIG,KAAK,CAAC,sBAAsBJ,UAAU,CAACE,MAAM,iBAAiB,CAAC;QAC7E;QAEA,IAAIF,UAAU,CAACK,aAAa,EAAE;UAC1B,MAAM,IAAID,KAAK,CAAC,oDAAoD,CAAC;QACzE;MACJ,CAAC,CAAC;IACN;;IAEA;IACA,IAAIlB,MAAM,CAACoB,QAAQ,IAAIpB,MAAM,CAACoB,QAAQ,KAAKnB,QAAQ,CAACmB,QAAQ,EAAE;MAC1D,IAAI;QACA;QACA,MAAMC,iBAAiB,GACnB,MAAM,IAAI,CAAC1B,sBAAsB,CAACQ,yBAAyB,CAACH,MAAM,CAACoB,QAAQ,CAAC;QAEhF,MAAM,IAAI,CAACzB,sBAAsB,CAACS,qBAAqB,CAAC;UACpDC,WAAW,EAAEgB,iBAAiB;UAC9Bf,GAAG,EAAE;QACT,CAAC,CAAC;MACN,CAAC,CAAC,OAAOgB,CAAC,EAAE;QACR,IAAIA,CAAC,YAAYC,+BAAkB,EAAE;UACjC,MAAM,IAAIb,cAAM,CACZ,qFAAqF,EACrF,kCACJ,CAAC;QACL;;QAEA;QACA,MAAMY,CAAC;MACX;IACJ;IAEA,MAAME,MAAM,GAAG,MAAM,IAAI,CAAC3B,SAAS,CAACC,OAAO,CAACC,EAAE,EAAEC,MAAM,CAAC;IAEvD,OAAO;MACH,GAAGwB,MAAM;MACTnB;IACJ,CAAC;EACL;AACJ;AAACoB,OAAA,CAAAhC,sCAAA,GAAAA,sCAAA","ignoreList":[]}
1
+ {"version":3,"names":["_apiSecurity","require","_error","_interopRequireDefault","UpdateFolderWithFolderLevelPermissions","constructor","folderLevelPermissions","getOperation","decoretee","execute","id","params","original","originalPermissions","getFolderLevelPermissions","ensureCanAccessFolder","permissions","rwd","getDefaultPermissions","stillHasAccess","canAccessFolder","WError","Array","isArray","forEach","permission","targetIsValid","target","startsWith","Error","inheritedFrom","parentId","parentPermissions","e","NotAuthorizedError","folder","exports"],"sources":["UpdateFolderWithFolderLevelPermissions.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport WError from \"@webiny/error\";\nimport type { AcoFolderStorageOperations, UpdateFolderParams } from \"~/folder/folder.types\";\nimport type { IUpdateFolder } from \"./IUpdateFolder\";\nimport type { FolderLevelPermissions } from \"~/flp\";\n\nexport class UpdateFolderWithFolderLevelPermissions implements IUpdateFolder {\n private folderLevelPermissions: FolderLevelPermissions;\n private readonly getOperation: AcoFolderStorageOperations[\"getFolder\"];\n private readonly decoretee: IUpdateFolder;\n\n constructor(\n folderLevelPermissions: FolderLevelPermissions,\n getOperation: AcoFolderStorageOperations[\"getFolder\"],\n decoretee: IUpdateFolder\n ) {\n this.folderLevelPermissions = folderLevelPermissions;\n this.getOperation = getOperation;\n this.decoretee = decoretee;\n }\n\n async execute(id: string, params: UpdateFolderParams) {\n const original = await this.getOperation({ id });\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 throw new WError(\n `Cannot continue because you would loose access to this folder.`,\n \"CANNOT_LOOSE_FOLDER_ACCESS\"\n );\n }\n\n // Validate data.\n if (Array.isArray(params.permissions)) {\n params.permissions.forEach(permission => {\n const targetIsValid =\n permission.target.startsWith(\"admin:\") || permission.target.startsWith(\"team:\");\n if (!targetIsValid) {\n throw new Error(`Permission target \"${permission.target}\" is not valid.`);\n }\n\n if (permission.inheritedFrom) {\n throw new Error(`Permission \"inheritedFrom\" cannot be set manually.`);\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 try {\n // Getting the parent folder permissions will throw an error if the user doesn't have access.\n const parentPermissions =\n await this.folderLevelPermissions.getFolderLevelPermissions(params.parentId);\n\n await this.folderLevelPermissions.ensureCanAccessFolder({\n permissions: parentPermissions,\n rwd: \"r\"\n });\n } catch (e) {\n if (e instanceof NotAuthorizedError) {\n throw new WError(\n `Cannot move folder to a new parent because you don't have access to the new parent.`,\n \"CANNOT_MOVE_FOLDER_TO_NEW_PARENT\"\n );\n }\n\n // If we didn't receive the expected error, we still want to throw it.\n throw e;\n }\n }\n\n const folder = await this.decoretee.execute(id, params);\n\n return {\n ...folder,\n permissions\n };\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AAKO,MAAMG,sCAAsC,CAA0B;EAKzEC,WAAWA,CACPC,sBAA8C,EAC9CC,YAAqD,EACrDC,SAAwB,EAC1B;IACE,IAAI,CAACF,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACC,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACC,SAAS,GAAGA,SAAS;EAC9B;EAEA,MAAMC,OAAOA,CAACC,EAAU,EAAEC,MAA0B,EAAE;IAClD,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACL,YAAY,CAAC;MAAEG;IAAG,CAAC,CAAC;IAChD,MAAMG,mBAAmB,GAAG,MAAM,IAAI,CAACP,sBAAsB,CAACQ,yBAAyB,CAACJ,EAAE,CAAC;;IAE3F;IACA,MAAM,IAAI,CAACJ,sBAAsB,CAACS,qBAAqB,CAAC;MACpDC,WAAW,EAAEH,mBAAmB;MAChCI,GAAG,EAAE;IACT,CAAC,CAAC;IAEF,MAAMD,WAAW,GAAG,MAAM,IAAI,CAACV,sBAAsB,CAACY,qBAAqB,CACvEP,MAAM,CAACK,WAAW,IAAI,EAC1B,CAAC;;IAED;IACA,MAAMG,cAAc,GAAG,MAAM,IAAI,CAACb,sBAAsB,CAACc,eAAe,CAAC;MACrEJ,WAAW;MACXC,GAAG,EAAE;IACT,CAAC,CAAC;IAEF,IAAI,CAACE,cAAc,EAAE;MACjB,MAAM,IAAIE,cAAM,CACZ,gEAAgE,EAChE,4BACJ,CAAC;IACL;;IAEA;IACA,IAAIC,KAAK,CAACC,OAAO,CAACZ,MAAM,CAACK,WAAW,CAAC,EAAE;MACnCL,MAAM,CAACK,WAAW,CAACQ,OAAO,CAACC,UAAU,IAAI;QACrC,MAAMC,aAAa,GACfD,UAAU,CAACE,MAAM,CAACC,UAAU,CAAC,QAAQ,CAAC,IAAIH,UAAU,CAACE,MAAM,CAACC,UAAU,CAAC,OAAO,CAAC;QACnF,IAAI,CAACF,aAAa,EAAE;UAChB,MAAM,IAAIG,KAAK,CAAC,sBAAsBJ,UAAU,CAACE,MAAM,iBAAiB,CAAC;QAC7E;QAEA,IAAIF,UAAU,CAACK,aAAa,EAAE;UAC1B,MAAM,IAAID,KAAK,CAAC,oDAAoD,CAAC;QACzE;MACJ,CAAC,CAAC;IACN;;IAEA;IACA,IAAIlB,MAAM,CAACoB,QAAQ,IAAIpB,MAAM,CAACoB,QAAQ,KAAKnB,QAAQ,CAACmB,QAAQ,EAAE;MAC1D,IAAI;QACA;QACA,MAAMC,iBAAiB,GACnB,MAAM,IAAI,CAAC1B,sBAAsB,CAACQ,yBAAyB,CAACH,MAAM,CAACoB,QAAQ,CAAC;QAEhF,MAAM,IAAI,CAACzB,sBAAsB,CAACS,qBAAqB,CAAC;UACpDC,WAAW,EAAEgB,iBAAiB;UAC9Bf,GAAG,EAAE;QACT,CAAC,CAAC;MACN,CAAC,CAAC,OAAOgB,CAAC,EAAE;QACR,IAAIA,CAAC,YAAYC,+BAAkB,EAAE;UACjC,MAAM,IAAIb,cAAM,CACZ,qFAAqF,EACrF,kCACJ,CAAC;QACL;;QAEA;QACA,MAAMY,CAAC;MACX;IACJ;IAEA,MAAME,MAAM,GAAG,MAAM,IAAI,CAAC3B,SAAS,CAACC,OAAO,CAACC,EAAE,EAAEC,MAAM,CAAC;IAEvD,OAAO;MACH,GAAGwB,MAAM;MACTnB;IACJ,CAAC;EACL;AACJ;AAACoB,OAAA,CAAAhC,sCAAA,GAAAA,sCAAA","ignoreList":[]}
@@ -1,7 +1,7 @@
1
- import { Topic } from "@webiny/pubsub/types";
1
+ import type { Topic } from "@webiny/pubsub/types";
2
2
  import type { AcoFolderStorageOperations, OnFolderAfterUpdateTopicParams, OnFolderBeforeUpdateTopicParams } from "../../folder.types";
3
3
  import { UpdateFolderWithFolderLevelPermissions } from "./UpdateFolderWithFolderLevelPermissions";
4
- import { FolderLevelPermissions } from "../../../flp";
4
+ import type { FolderLevelPermissions } from "../../../flp";
5
5
  export interface UpdateFolderUseCasesTopics {
6
6
  onFolderBeforeUpdate: Topic<OnFolderBeforeUpdateTopicParams>;
7
7
  onFolderAfterUpdate: Topic<OnFolderAfterUpdateTopicParams>;