@webiny/api-aco 6.4.12-beta.5 → 6.5.0-beta.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.
- package/createAcoContext.d.ts +1 -7
- package/createAcoContext.js +42 -38
- package/createAcoContext.js.map +1 -1
- package/exports/api/aco/folder.d.ts +1 -1
- package/exports/api/aco/folder.js +1 -1
- package/features/cms/decorators/MoveEntryWithFlpDecorator.d.ts +1 -1
- package/features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.d.ts +25 -0
- package/features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.js +48 -0
- package/features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.js.map +1 -0
- package/features/flp/FolderLevelPermissions/index.d.ts +1 -0
- package/features/flp/FolderLevelPermissions/index.js +1 -0
- package/features/folder/DeleteFolder/decorators/DeleteFolderWithFolderLevelPermissions.d.ts +1 -1
- package/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js +1 -1
- package/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js.map +1 -1
- package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js +4 -1
- package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js.map +1 -1
- package/features/folder/GetFolder/decorators/GetFolderWithFolderLevelPermissions.d.ts +8 -8
- package/features/folder/shared/abstractions.d.ts +4 -0
- package/features/folder/shared/abstractions.js +2 -1
- package/features/folder/shared/abstractions.js.map +1 -1
- package/filter/filter.so.d.ts +10 -2
- package/filter/filter.so.js.map +1 -1
- package/flp/index.d.ts +0 -1
- package/flp/index.js +0 -1
- package/flp/tasks/createFlp.task.d.ts +2 -2
- package/flp/tasks/deleteFlp.task.d.ts +2 -2
- package/flp/tasks/syncFlp.task.d.ts +2 -2
- package/flp/tasks/syncFlp.task.js +7 -1
- package/flp/tasks/syncFlp.task.js.map +1 -1
- package/flp/tasks/updateFlp.task.d.ts +2 -2
- package/folder/folder.gql.js +7 -1
- package/folder/folder.gql.js.map +1 -1
- package/index.d.ts +1 -6
- package/index.js +2 -2
- package/index.js.map +1 -1
- package/package.json +21 -24
- package/utils/createOperationsWrapper.d.ts +5 -2
- package/utils/createOperationsWrapper.js.map +1 -1
- package/utils/decorators/CmsEntriesCrudDecorators.js +1 -1
- package/utils/decorators/CmsEntriesCrudDecorators.js.map +1 -1
- package/utils/decorators/isPageModel.js +1 -1
- package/utils/decorators/isPageModel.js.map +1 -1
- package/utils/resolve.d.ts +1 -1
- package/createAcoStorageOperations.d.ts +0 -12
- package/createAcoStorageOperations.js +0 -9
- package/createAcoStorageOperations.js.map +0 -1
- package/flp/flp.so.d.ts +0 -20
- package/flp/flp.so.js +0 -183
- package/flp/flp.so.js.map +0 -1
package/createAcoContext.d.ts
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
1
|
import { ContextPlugin } from "@webiny/api";
|
|
2
|
-
import type { DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb/index.js";
|
|
3
2
|
import type { AcoContext } from "./types.js";
|
|
4
|
-
|
|
5
|
-
useFolderLevelPermissions?: boolean;
|
|
6
|
-
documentClient: DynamoDBDocument;
|
|
7
|
-
}
|
|
8
|
-
export declare const createAcoContext: (params: CreateAcoContextParams) => (ContextPlugin<AcoContext> | import("@webiny/handler").RegisterExtensionPlugin<import("@webiny/handler/types").Context>)[];
|
|
9
|
-
export {};
|
|
3
|
+
export declare const createAcoContext: () => (ContextPlugin<AcoContext> | import("@webiny/handler").RegisterExtensionPlugin<import("@webiny/handler/types").Context>)[];
|
package/createAcoContext.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ContextPlugin } from "@webiny/api";
|
|
2
2
|
import { isHeadlessCmsReady } from "@webiny/api-headless-cms";
|
|
3
|
-
import {
|
|
3
|
+
import { createFilterOperations } from "./filter/filter.so.js";
|
|
4
4
|
import { createFilterCrudMethods } from "./filter/filter.crud.js";
|
|
5
5
|
import { createFlpCrudMethods } from "./flp/index.js";
|
|
6
6
|
import { FolderLevelPermissions, FolderLevelPermissionsFeature } from "./features/flp/FolderLevelPermissions/index.js";
|
|
@@ -18,7 +18,7 @@ import { CreateFlpFeature } from "./features/flp/CreateFlp/index.js";
|
|
|
18
18
|
import { DeleteFlpFeature } from "./features/flp/DeleteFlp/index.js";
|
|
19
19
|
import { UpdateFlpFeature } from "./features/flp/UpdateFlp/index.js";
|
|
20
20
|
import { EnsureFolderIsEmptyOnDeleteFeature } from "./features/folder/EnsureFolderIsEmptyOnDelete/index.js";
|
|
21
|
-
import { FilterStorageOperations } from "./features/folder/shared/abstractions.js";
|
|
21
|
+
import { FilterStorageOperations, FlpStorageOperations } from "./features/folder/shared/abstractions.js";
|
|
22
22
|
import { ListFlpsFeature } from "./features/flp/ListFlps/feature.js";
|
|
23
23
|
import { GetFlpFeature } from "./features/flp/GetFlp/feature.js";
|
|
24
24
|
import { ListFolderLevelPermissionsTargetsFeature } from "./features/folder/ListFolderLevelPermissionsTargets/feature.js";
|
|
@@ -30,63 +30,67 @@ import { EnsureFolderIsEmptyFeature } from "./features/folder/EnsureFolderIsEmpt
|
|
|
30
30
|
import { FOLDER_MODEL_ID, FolderModel as folder_model_js_FolderModel } from "./domain/folder/folder.model.js";
|
|
31
31
|
import { FilterPrivateModel } from "./filter/filter.model.js";
|
|
32
32
|
import { createRegisterExtensionPlugin } from "@webiny/handler";
|
|
33
|
-
const setupAcoContext = async (context
|
|
34
|
-
const { tenancy, security } = context;
|
|
35
|
-
const getModel =
|
|
36
|
-
const folderModelResult = await
|
|
33
|
+
const setupAcoContext = async (context)=>{
|
|
34
|
+
const { tenancy, security, cms, container } = context;
|
|
35
|
+
const getModel = container.resolve(GetModelUseCase);
|
|
36
|
+
const folderModelResult = await security.withoutAuthorization(async ()=>await getModel.execute(FOLDER_MODEL_ID));
|
|
37
37
|
if (folderModelResult.isFail()) throw folderModelResult.error;
|
|
38
|
-
|
|
38
|
+
container.registerInstance(FolderModel, folderModelResult.value);
|
|
39
39
|
const getTenant = ()=>tenancy.getCurrentTenant();
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
const flpSo = container.resolve(FlpStorageOperations);
|
|
41
|
+
const filterSo = createFilterOperations({
|
|
42
|
+
cms,
|
|
43
|
+
security,
|
|
44
|
+
container
|
|
45
45
|
});
|
|
46
|
+
const storageOperations = {
|
|
47
|
+
filter: filterSo,
|
|
48
|
+
flp: flpSo
|
|
49
|
+
};
|
|
46
50
|
const flpCrudMethods = createFlpCrudMethods({
|
|
47
51
|
getTenant,
|
|
48
52
|
storageOperations
|
|
49
53
|
});
|
|
50
|
-
FolderLevelPermissionsFeature.register(
|
|
51
|
-
|
|
52
|
-
CreateFolderFeature.register(
|
|
53
|
-
UpdateFolderFeature.register(
|
|
54
|
-
DeleteFolderFeature.register(
|
|
55
|
-
GetFolderFeature.register(
|
|
56
|
-
ListFoldersFeature.register(
|
|
57
|
-
ListFolderLevelPermissionsTargetsFeature.register(
|
|
58
|
-
GetFolderHierarchyFeature.register(
|
|
59
|
-
GetAncestorsFeature.register(
|
|
60
|
-
EnsureFolderIsEmptyFeature.register(
|
|
61
|
-
CreateFlpFeature.register(
|
|
54
|
+
FolderLevelPermissionsFeature.register(container);
|
|
55
|
+
container.registerInstance(FilterStorageOperations, storageOperations.filter);
|
|
56
|
+
CreateFolderFeature.register(container);
|
|
57
|
+
UpdateFolderFeature.register(container);
|
|
58
|
+
DeleteFolderFeature.register(container);
|
|
59
|
+
GetFolderFeature.register(container);
|
|
60
|
+
ListFoldersFeature.register(container);
|
|
61
|
+
ListFolderLevelPermissionsTargetsFeature.register(container);
|
|
62
|
+
GetFolderHierarchyFeature.register(container);
|
|
63
|
+
GetAncestorsFeature.register(container);
|
|
64
|
+
EnsureFolderIsEmptyFeature.register(container);
|
|
65
|
+
CreateFlpFeature.register(container, {
|
|
62
66
|
context
|
|
63
67
|
});
|
|
64
|
-
UpdateFlpFeature.register(
|
|
68
|
+
UpdateFlpFeature.register(container, {
|
|
65
69
|
context
|
|
66
70
|
});
|
|
67
|
-
DeleteFlpFeature.register(
|
|
71
|
+
DeleteFlpFeature.register(container, {
|
|
68
72
|
context
|
|
69
73
|
});
|
|
70
|
-
ListFlpsFeature.register(
|
|
71
|
-
GetFlpFeature.register(
|
|
72
|
-
CreateFlpOnFolderCreatedFeature.register(
|
|
73
|
-
UpdateFlpOnFolderUpdatedFeature.register(
|
|
74
|
-
DeleteFlpOnFolderDeletedFeature.register(
|
|
75
|
-
EnsureFolderIsEmptyOnDeleteFeature.register(
|
|
76
|
-
EnsureHcmsFolderIsEmptyOnDeleteFeature.register(
|
|
77
|
-
const folderLevelPermissions =
|
|
74
|
+
ListFlpsFeature.register(container, flpCrudMethods);
|
|
75
|
+
GetFlpFeature.register(container, flpCrudMethods);
|
|
76
|
+
CreateFlpOnFolderCreatedFeature.register(container);
|
|
77
|
+
UpdateFlpOnFolderUpdatedFeature.register(container);
|
|
78
|
+
DeleteFlpOnFolderDeletedFeature.register(container);
|
|
79
|
+
EnsureFolderIsEmptyOnDeleteFeature.register(container);
|
|
80
|
+
EnsureHcmsFolderIsEmptyOnDeleteFeature.register(container);
|
|
81
|
+
const folderLevelPermissions = container.resolve(FolderLevelPermissions);
|
|
78
82
|
context.aco = {
|
|
79
83
|
filter: createFilterCrudMethods({
|
|
80
|
-
container
|
|
84
|
+
container,
|
|
81
85
|
getTenant,
|
|
82
86
|
storageOperations,
|
|
83
87
|
folderLevelPermissions
|
|
84
88
|
}),
|
|
85
89
|
flp: flpCrudMethods
|
|
86
90
|
};
|
|
87
|
-
if (context.wcp.canUseFolderLevelPermissions()) CmsFlpFeature.register(
|
|
91
|
+
if (context.wcp.canUseFolderLevelPermissions()) CmsFlpFeature.register(container);
|
|
88
92
|
};
|
|
89
|
-
const createAcoContext = (
|
|
93
|
+
const createAcoContext = ()=>{
|
|
90
94
|
const modelsPlugin = createRegisterExtensionPlugin((context)=>{
|
|
91
95
|
context.container.register(folder_model_js_FolderModel);
|
|
92
96
|
context.container.register(FilterPrivateModel);
|
|
@@ -94,7 +98,7 @@ const createAcoContext = (params)=>{
|
|
|
94
98
|
const acoContextPlugin = new ContextPlugin(async (context)=>{
|
|
95
99
|
if (!await isHeadlessCmsReady(context)) return;
|
|
96
100
|
await context.benchmark.measure("aco.context.setup", async ()=>{
|
|
97
|
-
await setupAcoContext(context
|
|
101
|
+
await setupAcoContext(context);
|
|
98
102
|
});
|
|
99
103
|
});
|
|
100
104
|
acoContextPlugin.name = "aco.createContext";
|
package/createAcoContext.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAcoContext.js","sources":["../src/createAcoContext.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport type { DynamoDBDocument } from \"@webiny/aws-sdk/client-dynamodb/index.js\";\nimport { createAcoStorageOperations } from \"~/createAcoStorageOperations.js\";\nimport type { AcoContext } from \"~/types.js\";\nimport { createFilterCrudMethods } from \"~/filter/filter.crud.js\";\nimport { createFlpCrudMethods } from \"~/flp/index.js\";\nimport {\n FolderLevelPermissions,\n FolderLevelPermissionsFeature\n} from \"~/features/flp/FolderLevelPermissions/index.js\";\nimport { UpdateFolderFeature } from \"~/features/folder/UpdateFolder/index.js\";\nimport { DeleteFolderFeature } from \"~/features/folder/DeleteFolder/index.js\";\nimport { CreateFolderFeature } from \"~/features/folder/CreateFolder/index.js\";\nimport { GetFolderFeature } from \"~/features/folder/GetFolder/index.js\";\nimport { ListFoldersFeature } from \"~/features/folder/ListFolders/index.js\";\nimport { GetFolderHierarchyFeature } from \"~/features/folder/GetFolderHierarchy/index.js\";\nimport { GetAncestorsFeature } from \"~/features/folder/GetAncestors/index.js\";\nimport { UpdateFlpOnFolderUpdatedFeature } from \"~/features/flp/UpdateFlpOnFolderUpdated/index.js\";\nimport { DeleteFlpOnFolderDeletedFeature } from \"~/features/flp/DeleteFlpOnFolderDeleted/index.js\";\nimport { EnsureHcmsFolderIsEmptyOnDeleteFeature } from \"~/features/folder/EnsureHcmsFolderIsEmptyOnDelete/index.js\";\nimport { CreateFlpFeature } from \"~/features/flp/CreateFlp/index.js\";\nimport { DeleteFlpFeature } from \"~/features/flp/DeleteFlp/index.js\";\nimport { UpdateFlpFeature } from \"~/features/flp/UpdateFlp/index.js\";\nimport { EnsureFolderIsEmptyOnDeleteFeature } from \"~/features/folder/EnsureFolderIsEmptyOnDelete/index.js\";\nimport { FilterStorageOperations } from \"~/features/folder/shared/abstractions.js\";\nimport { ListFlpsFeature } from \"~/features/flp/ListFlps/feature.js\";\nimport { GetFlpFeature } from \"~/features/flp/GetFlp/feature.js\";\nimport { ListFolderLevelPermissionsTargetsFeature } from \"~/features/folder/ListFolderLevelPermissionsTargets/feature.js\";\nimport { Tenant } from \"@webiny/api-core/types/tenancy\";\nimport { CmsFlpFeature } from \"~/features/cms/index.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { FolderModel as FolderModelAbstraction } from \"~/domain/folder/abstractions.js\";\nimport { CreateFlpOnFolderCreatedFeature } from \"~/features/flp/CreateFlpOnFolderCreated/index.js\";\nimport { EnsureFolderIsEmptyFeature } from \"~/features/folder/EnsureFolderIsEmpty/feature.js\";\nimport { FOLDER_MODEL_ID, FolderModel } from \"~/domain/folder/folder.model.js\";\nimport { FilterPrivateModel } from \"~/filter/filter.model.js\";\nimport { createRegisterExtensionPlugin } from \"@webiny/handler\";\n\ninterface CreateAcoContextParams {\n useFolderLevelPermissions?: boolean;\n documentClient: DynamoDBDocument;\n}\n\nconst setupAcoContext = async (\n context: AcoContext,\n setupAcoContextParams: CreateAcoContextParams\n): Promise<void> => {\n const { tenancy, security } = context;\n\n const getModel = context.container.resolve(GetModelUseCase);\n\n const folderModelResult = await context.security.withoutAuthorization(async () => {\n return await getModel.execute(FOLDER_MODEL_ID);\n });\n if (folderModelResult.isFail()) {\n throw folderModelResult.error;\n }\n context.container.registerInstance(FolderModelAbstraction, folderModelResult.value);\n\n const getTenant = (): Tenant => {\n return tenancy.getCurrentTenant();\n };\n\n const storageOperations = await createAcoStorageOperations({\n /**\n * TODO: We need to figure out a way to pass \"cms\" from outside (e.g. apps/api/graphql)\n */\n cms: context.cms,\n container: context.container,\n documentClient: setupAcoContextParams.documentClient,\n security\n });\n\n const flpCrudMethods = createFlpCrudMethods({\n getTenant,\n storageOperations\n });\n\n FolderLevelPermissionsFeature.register(context.container);\n\n /**\n * Register legacy dependencies via abstractions\n */\n context.container.registerInstance(FilterStorageOperations, storageOperations.filter);\n\n /**\n * Register folder features into DI container\n */\n CreateFolderFeature.register(context.container);\n\n UpdateFolderFeature.register(context.container);\n\n DeleteFolderFeature.register(context.container);\n\n GetFolderFeature.register(context.container);\n\n ListFoldersFeature.register(context.container);\n\n ListFolderLevelPermissionsTargetsFeature.register(context.container);\n\n GetFolderHierarchyFeature.register(context.container);\n\n GetAncestorsFeature.register(context.container);\n\n EnsureFolderIsEmptyFeature.register(context.container);\n\n /**\n * Register FLP use cases and event handlers\n */\n CreateFlpFeature.register(context.container, { context });\n UpdateFlpFeature.register(context.container, { context });\n DeleteFlpFeature.register(context.container, { context });\n ListFlpsFeature.register(context.container, flpCrudMethods);\n GetFlpFeature.register(context.container, flpCrudMethods);\n\n CreateFlpOnFolderCreatedFeature.register(context.container);\n\n UpdateFlpOnFolderUpdatedFeature.register(context.container);\n\n DeleteFlpOnFolderDeletedFeature.register(context.container);\n\n /**\n * Register folder event handlers\n */\n EnsureFolderIsEmptyOnDeleteFeature.register(context.container);\n EnsureHcmsFolderIsEmptyOnDeleteFeature.register(context.container);\n\n /**\n * Setup legacy context\n */\n const folderLevelPermissions = context.container.resolve(FolderLevelPermissions);\n\n context.aco = {\n filter: createFilterCrudMethods({\n container: context.container,\n getTenant,\n storageOperations,\n folderLevelPermissions\n }),\n flp: flpCrudMethods\n };\n\n if (context.wcp.canUseFolderLevelPermissions()) {\n CmsFlpFeature.register(context.container);\n }\n};\n\nexport const createAcoContext = (params: CreateAcoContextParams) => {\n const modelsPlugin = createRegisterExtensionPlugin(context => {\n context.container.register(FolderModel);\n context.container.register(FilterPrivateModel);\n });\n\n const acoContextPlugin = new ContextPlugin<AcoContext>(async context => {\n /**\n * We can skip the ACO initialization if the installation is pending.\n */\n if (!(await isHeadlessCmsReady(context))) {\n return;\n }\n\n await context.benchmark.measure(\"aco.context.setup\", async () => {\n await setupAcoContext(context, params);\n });\n });\n\n acoContextPlugin.name = \"aco.createContext\";\n\n return [acoContextPlugin, modelsPlugin];\n};\n"],"names":["setupAcoContext","context","setupAcoContextParams","tenancy","security","getModel","GetModelUseCase","folderModelResult","FOLDER_MODEL_ID","FolderModelAbstraction","getTenant","storageOperations","createAcoStorageOperations","flpCrudMethods","createFlpCrudMethods","FolderLevelPermissionsFeature","FilterStorageOperations","CreateFolderFeature","UpdateFolderFeature","DeleteFolderFeature","GetFolderFeature","ListFoldersFeature","ListFolderLevelPermissionsTargetsFeature","GetFolderHierarchyFeature","GetAncestorsFeature","EnsureFolderIsEmptyFeature","CreateFlpFeature","UpdateFlpFeature","DeleteFlpFeature","ListFlpsFeature","GetFlpFeature","CreateFlpOnFolderCreatedFeature","UpdateFlpOnFolderUpdatedFeature","DeleteFlpOnFolderDeletedFeature","EnsureFolderIsEmptyOnDeleteFeature","EnsureHcmsFolderIsEmptyOnDeleteFeature","folderLevelPermissions","FolderLevelPermissions","createFilterCrudMethods","CmsFlpFeature","createAcoContext","params","modelsPlugin","createRegisterExtensionPlugin","FolderModel","FilterPrivateModel","acoContextPlugin","ContextPlugin","isHeadlessCmsReady"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,MAAMA,kBAAkB,OACpBC,SACAC;IAEA,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAE,GAAGH;IAE9B,MAAMI,WAAWJ,QAAQ,SAAS,CAAC,OAAO,CAACK;IAE3C,MAAMC,oBAAoB,MAAMN,QAAQ,QAAQ,CAAC,oBAAoB,CAAC,UAC3D,MAAMI,SAAS,OAAO,CAACG;IAElC,IAAID,kBAAkB,MAAM,IACxB,MAAMA,kBAAkB,KAAK;IAEjCN,QAAQ,SAAS,CAAC,gBAAgB,CAACQ,aAAwBF,kBAAkB,KAAK;IAElF,MAAMG,YAAY,IACPP,QAAQ,gBAAgB;IAGnC,MAAMQ,oBAAoB,MAAMC,2BAA2B;QAIvD,KAAKX,QAAQ,GAAG;QAChB,WAAWA,QAAQ,SAAS;QAC5B,gBAAgBC,sBAAsB,cAAc;QACpDE;IACJ;IAEA,MAAMS,iBAAiBC,qBAAqB;QACxCJ;QACAC;IACJ;IAEAI,8BAA8B,QAAQ,CAACd,QAAQ,SAAS;IAKxDA,QAAQ,SAAS,CAAC,gBAAgB,CAACe,yBAAyBL,kBAAkB,MAAM;IAKpFM,oBAAoB,QAAQ,CAAChB,QAAQ,SAAS;IAE9CiB,oBAAoB,QAAQ,CAACjB,QAAQ,SAAS;IAE9CkB,oBAAoB,QAAQ,CAAClB,QAAQ,SAAS;IAE9CmB,iBAAiB,QAAQ,CAACnB,QAAQ,SAAS;IAE3CoB,mBAAmB,QAAQ,CAACpB,QAAQ,SAAS;IAE7CqB,yCAAyC,QAAQ,CAACrB,QAAQ,SAAS;IAEnEsB,0BAA0B,QAAQ,CAACtB,QAAQ,SAAS;IAEpDuB,oBAAoB,QAAQ,CAACvB,QAAQ,SAAS;IAE9CwB,2BAA2B,QAAQ,CAACxB,QAAQ,SAAS;IAKrDyB,iBAAiB,QAAQ,CAACzB,QAAQ,SAAS,EAAE;QAAEA;IAAQ;IACvD0B,iBAAiB,QAAQ,CAAC1B,QAAQ,SAAS,EAAE;QAAEA;IAAQ;IACvD2B,iBAAiB,QAAQ,CAAC3B,QAAQ,SAAS,EAAE;QAAEA;IAAQ;IACvD4B,gBAAgB,QAAQ,CAAC5B,QAAQ,SAAS,EAAEY;IAC5CiB,cAAc,QAAQ,CAAC7B,QAAQ,SAAS,EAAEY;IAE1CkB,gCAAgC,QAAQ,CAAC9B,QAAQ,SAAS;IAE1D+B,gCAAgC,QAAQ,CAAC/B,QAAQ,SAAS;IAE1DgC,gCAAgC,QAAQ,CAAChC,QAAQ,SAAS;IAK1DiC,mCAAmC,QAAQ,CAACjC,QAAQ,SAAS;IAC7DkC,uCAAuC,QAAQ,CAAClC,QAAQ,SAAS;IAKjE,MAAMmC,yBAAyBnC,QAAQ,SAAS,CAAC,OAAO,CAACoC;IAEzDpC,QAAQ,GAAG,GAAG;QACV,QAAQqC,wBAAwB;YAC5B,WAAWrC,QAAQ,SAAS;YAC5BS;YACAC;YACAyB;QACJ;QACA,KAAKvB;IACT;IAEA,IAAIZ,QAAQ,GAAG,CAAC,4BAA4B,IACxCsC,cAAc,QAAQ,CAACtC,QAAQ,SAAS;AAEhD;AAEO,MAAMuC,mBAAmB,CAACC;IAC7B,MAAMC,eAAeC,8BAA8B1C,CAAAA;QAC/CA,QAAQ,SAAS,CAAC,QAAQ,CAAC2C;QAC3B3C,QAAQ,SAAS,CAAC,QAAQ,CAAC4C;IAC/B;IAEA,MAAMC,mBAAmB,IAAIC,cAA0B,OAAM9C;QAIzD,IAAI,CAAE,MAAM+C,mBAAmB/C,UAC3B;QAGJ,MAAMA,QAAQ,SAAS,CAAC,OAAO,CAAC,qBAAqB;YACjD,MAAMD,gBAAgBC,SAASwC;QACnC;IACJ;IAEAK,iBAAiB,IAAI,GAAG;IAExB,OAAO;QAACA;QAAkBJ;KAAa;AAC3C"}
|
|
1
|
+
{"version":3,"file":"createAcoContext.js","sources":["../src/createAcoContext.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport { createFilterOperations } from \"~/filter/filter.so.js\";\nimport { createFilterCrudMethods } from \"~/filter/filter.crud.js\";\nimport type { AcoContext } from \"~/types.js\";\nimport { createFlpCrudMethods } from \"~/flp/index.js\";\nimport {\n FolderLevelPermissions,\n FolderLevelPermissionsFeature\n} from \"~/features/flp/FolderLevelPermissions/index.js\";\nimport { UpdateFolderFeature } from \"~/features/folder/UpdateFolder/index.js\";\nimport { DeleteFolderFeature } from \"~/features/folder/DeleteFolder/index.js\";\nimport { CreateFolderFeature } from \"~/features/folder/CreateFolder/index.js\";\nimport { GetFolderFeature } from \"~/features/folder/GetFolder/index.js\";\nimport { ListFoldersFeature } from \"~/features/folder/ListFolders/index.js\";\nimport { GetFolderHierarchyFeature } from \"~/features/folder/GetFolderHierarchy/index.js\";\nimport { GetAncestorsFeature } from \"~/features/folder/GetAncestors/index.js\";\nimport { UpdateFlpOnFolderUpdatedFeature } from \"~/features/flp/UpdateFlpOnFolderUpdated/index.js\";\nimport { DeleteFlpOnFolderDeletedFeature } from \"~/features/flp/DeleteFlpOnFolderDeleted/index.js\";\nimport { EnsureHcmsFolderIsEmptyOnDeleteFeature } from \"~/features/folder/EnsureHcmsFolderIsEmptyOnDelete/index.js\";\nimport { CreateFlpFeature } from \"~/features/flp/CreateFlp/index.js\";\nimport { DeleteFlpFeature } from \"~/features/flp/DeleteFlp/index.js\";\nimport { UpdateFlpFeature } from \"~/features/flp/UpdateFlp/index.js\";\nimport { EnsureFolderIsEmptyOnDeleteFeature } from \"~/features/folder/EnsureFolderIsEmptyOnDelete/index.js\";\nimport {\n FilterStorageOperations,\n FlpStorageOperations\n} from \"~/features/folder/shared/abstractions.js\";\nimport { ListFlpsFeature } from \"~/features/flp/ListFlps/feature.js\";\nimport { GetFlpFeature } from \"~/features/flp/GetFlp/feature.js\";\nimport { ListFolderLevelPermissionsTargetsFeature } from \"~/features/folder/ListFolderLevelPermissionsTargets/feature.js\";\nimport { Tenant } from \"@webiny/api-core/types/tenancy\";\nimport { CmsFlpFeature } from \"~/features/cms/index.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { FolderModel as FolderModelAbstraction } from \"~/domain/folder/abstractions.js\";\nimport { CreateFlpOnFolderCreatedFeature } from \"~/features/flp/CreateFlpOnFolderCreated/index.js\";\nimport { EnsureFolderIsEmptyFeature } from \"~/features/folder/EnsureFolderIsEmpty/feature.js\";\nimport { FOLDER_MODEL_ID, FolderModel } from \"~/domain/folder/folder.model.js\";\nimport { FilterPrivateModel } from \"~/filter/filter.model.js\";\nimport { createRegisterExtensionPlugin } from \"@webiny/handler\";\nimport type { AcoStorageOperations } from \"~/types.js\";\n\nconst setupAcoContext = async (context: AcoContext): Promise<void> => {\n const { tenancy, security, cms, container } = context;\n\n const getModel = container.resolve(GetModelUseCase);\n\n const folderModelResult = await security.withoutAuthorization(async () => {\n return await getModel.execute(FOLDER_MODEL_ID);\n });\n if (folderModelResult.isFail()) {\n throw folderModelResult.error;\n }\n container.registerInstance(FolderModelAbstraction, folderModelResult.value);\n\n const getTenant = (): Tenant => {\n return tenancy.getCurrentTenant();\n };\n\n const flpSo = container.resolve(FlpStorageOperations);\n const filterSo = createFilterOperations({ cms, security, container });\n\n const storageOperations: AcoStorageOperations = {\n filter: filterSo,\n flp: flpSo\n };\n\n const flpCrudMethods = createFlpCrudMethods({\n getTenant,\n storageOperations\n });\n\n FolderLevelPermissionsFeature.register(container);\n\n container.registerInstance(FilterStorageOperations, storageOperations.filter);\n\n CreateFolderFeature.register(container);\n UpdateFolderFeature.register(container);\n DeleteFolderFeature.register(container);\n GetFolderFeature.register(container);\n ListFoldersFeature.register(container);\n ListFolderLevelPermissionsTargetsFeature.register(container);\n GetFolderHierarchyFeature.register(container);\n GetAncestorsFeature.register(container);\n EnsureFolderIsEmptyFeature.register(container);\n\n CreateFlpFeature.register(container, { context });\n UpdateFlpFeature.register(container, { context });\n DeleteFlpFeature.register(container, { context });\n ListFlpsFeature.register(container, flpCrudMethods);\n GetFlpFeature.register(container, flpCrudMethods);\n\n CreateFlpOnFolderCreatedFeature.register(container);\n UpdateFlpOnFolderUpdatedFeature.register(container);\n DeleteFlpOnFolderDeletedFeature.register(container);\n\n EnsureFolderIsEmptyOnDeleteFeature.register(container);\n EnsureHcmsFolderIsEmptyOnDeleteFeature.register(container);\n\n const folderLevelPermissions = container.resolve(FolderLevelPermissions);\n\n context.aco = {\n filter: createFilterCrudMethods({\n container,\n getTenant,\n storageOperations,\n folderLevelPermissions\n }),\n flp: flpCrudMethods\n };\n\n if (context.wcp.canUseFolderLevelPermissions()) {\n CmsFlpFeature.register(container);\n }\n};\n\nexport const createAcoContext = () => {\n const modelsPlugin = createRegisterExtensionPlugin(context => {\n context.container.register(FolderModel);\n context.container.register(FilterPrivateModel);\n });\n\n const acoContextPlugin = new ContextPlugin<AcoContext>(async context => {\n if (!(await isHeadlessCmsReady(context))) {\n return;\n }\n\n await context.benchmark.measure(\"aco.context.setup\", async () => {\n await setupAcoContext(context);\n });\n });\n\n acoContextPlugin.name = \"aco.createContext\";\n\n return [acoContextPlugin, modelsPlugin];\n};\n"],"names":["setupAcoContext","context","tenancy","security","cms","container","getModel","GetModelUseCase","folderModelResult","FOLDER_MODEL_ID","FolderModelAbstraction","getTenant","flpSo","FlpStorageOperations","filterSo","createFilterOperations","storageOperations","flpCrudMethods","createFlpCrudMethods","FolderLevelPermissionsFeature","FilterStorageOperations","CreateFolderFeature","UpdateFolderFeature","DeleteFolderFeature","GetFolderFeature","ListFoldersFeature","ListFolderLevelPermissionsTargetsFeature","GetFolderHierarchyFeature","GetAncestorsFeature","EnsureFolderIsEmptyFeature","CreateFlpFeature","UpdateFlpFeature","DeleteFlpFeature","ListFlpsFeature","GetFlpFeature","CreateFlpOnFolderCreatedFeature","UpdateFlpOnFolderUpdatedFeature","DeleteFlpOnFolderDeletedFeature","EnsureFolderIsEmptyOnDeleteFeature","EnsureHcmsFolderIsEmptyOnDeleteFeature","folderLevelPermissions","FolderLevelPermissions","createFilterCrudMethods","CmsFlpFeature","createAcoContext","modelsPlugin","createRegisterExtensionPlugin","FolderModel","FilterPrivateModel","acoContextPlugin","ContextPlugin","isHeadlessCmsReady"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,MAAMA,kBAAkB,OAAOC;IAC3B,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,GAAG,EAAEC,SAAS,EAAE,GAAGJ;IAE9C,MAAMK,WAAWD,UAAU,OAAO,CAACE;IAEnC,MAAMC,oBAAoB,MAAML,SAAS,oBAAoB,CAAC,UACnD,MAAMG,SAAS,OAAO,CAACG;IAElC,IAAID,kBAAkB,MAAM,IACxB,MAAMA,kBAAkB,KAAK;IAEjCH,UAAU,gBAAgB,CAACK,aAAwBF,kBAAkB,KAAK;IAE1E,MAAMG,YAAY,IACPT,QAAQ,gBAAgB;IAGnC,MAAMU,QAAQP,UAAU,OAAO,CAACQ;IAChC,MAAMC,WAAWC,uBAAuB;QAAEX;QAAKD;QAAUE;IAAU;IAEnE,MAAMW,oBAA0C;QAC5C,QAAQF;QACR,KAAKF;IACT;IAEA,MAAMK,iBAAiBC,qBAAqB;QACxCP;QACAK;IACJ;IAEAG,8BAA8B,QAAQ,CAACd;IAEvCA,UAAU,gBAAgB,CAACe,yBAAyBJ,kBAAkB,MAAM;IAE5EK,oBAAoB,QAAQ,CAAChB;IAC7BiB,oBAAoB,QAAQ,CAACjB;IAC7BkB,oBAAoB,QAAQ,CAAClB;IAC7BmB,iBAAiB,QAAQ,CAACnB;IAC1BoB,mBAAmB,QAAQ,CAACpB;IAC5BqB,yCAAyC,QAAQ,CAACrB;IAClDsB,0BAA0B,QAAQ,CAACtB;IACnCuB,oBAAoB,QAAQ,CAACvB;IAC7BwB,2BAA2B,QAAQ,CAACxB;IAEpCyB,iBAAiB,QAAQ,CAACzB,WAAW;QAAEJ;IAAQ;IAC/C8B,iBAAiB,QAAQ,CAAC1B,WAAW;QAAEJ;IAAQ;IAC/C+B,iBAAiB,QAAQ,CAAC3B,WAAW;QAAEJ;IAAQ;IAC/CgC,gBAAgB,QAAQ,CAAC5B,WAAWY;IACpCiB,cAAc,QAAQ,CAAC7B,WAAWY;IAElCkB,gCAAgC,QAAQ,CAAC9B;IACzC+B,gCAAgC,QAAQ,CAAC/B;IACzCgC,gCAAgC,QAAQ,CAAChC;IAEzCiC,mCAAmC,QAAQ,CAACjC;IAC5CkC,uCAAuC,QAAQ,CAAClC;IAEhD,MAAMmC,yBAAyBnC,UAAU,OAAO,CAACoC;IAEjDxC,QAAQ,GAAG,GAAG;QACV,QAAQyC,wBAAwB;YAC5BrC;YACAM;YACAK;YACAwB;QACJ;QACA,KAAKvB;IACT;IAEA,IAAIhB,QAAQ,GAAG,CAAC,4BAA4B,IACxC0C,cAAc,QAAQ,CAACtC;AAE/B;AAEO,MAAMuC,mBAAmB;IAC5B,MAAMC,eAAeC,8BAA8B7C,CAAAA;QAC/CA,QAAQ,SAAS,CAAC,QAAQ,CAAC8C;QAC3B9C,QAAQ,SAAS,CAAC,QAAQ,CAAC+C;IAC/B;IAEA,MAAMC,mBAAmB,IAAIC,cAA0B,OAAMjD;QACzD,IAAI,CAAE,MAAMkD,mBAAmBlD,UAC3B;QAGJ,MAAMA,QAAQ,SAAS,CAAC,OAAO,CAAC,qBAAqB;YACjD,MAAMD,gBAAgBC;QAC1B;IACJ;IAEAgD,iBAAiB,IAAI,GAAG;IAExB,OAAO;QAACA;QAAkBJ;KAAa;AAC3C"}
|
|
@@ -7,5 +7,5 @@ export { FolderAfterDeleteEventHandler, FolderBeforeDeleteEventHandler, DeleteFo
|
|
|
7
7
|
export { FolderAfterUpdateEventHandler, FolderBeforeUpdateEventHandler, UpdateFolderRepository, UpdateFolderUseCase } from "../../../features/folder/UpdateFolder/abstractions.js";
|
|
8
8
|
export { EnsureFolderIsEmpty } from "../../../features/folder/EnsureFolderIsEmpty/abstractions.js";
|
|
9
9
|
export { ListFoldersUseCase, ListFoldersRepository } from "../../../features/folder/ListFolders/abstractions.js";
|
|
10
|
-
export { FilterStorageOperations } from "../../../features/folder/shared/abstractions.js";
|
|
10
|
+
export { FilterStorageOperations, FlpStorageOperations } from "../../../features/folder/shared/abstractions.js";
|
|
11
11
|
export type { Folder } from "../../../folder/folder.types.js";
|
|
@@ -7,4 +7,4 @@ export { DeleteFolderRepository, DeleteFolderUseCase, FolderAfterDeleteEventHand
|
|
|
7
7
|
export { FolderAfterUpdateEventHandler, FolderBeforeUpdateEventHandler, UpdateFolderRepository, UpdateFolderUseCase } from "../../../features/folder/UpdateFolder/abstractions.js";
|
|
8
8
|
export { EnsureFolderIsEmpty } from "../../../features/folder/EnsureFolderIsEmpty/abstractions.js";
|
|
9
9
|
export { ListFoldersRepository, ListFoldersUseCase } from "../../../features/folder/ListFolders/abstractions.js";
|
|
10
|
-
export { FilterStorageOperations } from "../../../features/folder/shared/abstractions.js";
|
|
10
|
+
export { FilterStorageOperations, FlpStorageOperations } from "../../../features/folder/shared/abstractions.js";
|
|
@@ -9,7 +9,7 @@ declare class MoveEntryWithFlpDecoratorImpl implements MoveEntryUseCase.Interfac
|
|
|
9
9
|
private getRevisionById;
|
|
10
10
|
private decoratee;
|
|
11
11
|
constructor(folderLevelPermissions: FolderLevelPermissions.Interface, getRevisionById: GetRevisionByIdUseCase.Interface, decoratee: MoveEntryUseCase.Interface);
|
|
12
|
-
execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, id: string, targetFolderId: string): Promise<Result<import("@webiny/api-headless-cms/types/types").CmsEntry<T>, EntryNotAuthorizedError | import("@webiny/api-headless-cms/domain/contentEntry/errors.js").
|
|
12
|
+
execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, id: string, targetFolderId: string): Promise<Result<import("@webiny/api-headless-cms/types/types").CmsEntry<T>, EntryNotAuthorizedError | import("@webiny/api-headless-cms/domain/contentEntry/errors.js").EntryNotFoundError | import("@webiny/api-headless-cms/domain/contentEntry/errors.js").EntryPersistenceError>>;
|
|
13
13
|
}
|
|
14
14
|
export declare const MoveEntryWithFlpDecorator: typeof MoveEntryWithFlpDecoratorImpl;
|
|
15
15
|
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type IFolderLevelPermissions } from "./abstractions.js";
|
|
2
|
+
import type { FolderPermission } from "../../../types.js";
|
|
3
|
+
declare class NoopFolderLevelPermissionsImpl implements IFolderLevelPermissions {
|
|
4
|
+
canUseFolderLevelPermissions(): boolean;
|
|
5
|
+
canUseTeams(): boolean;
|
|
6
|
+
canCreateFolderInRoot(): boolean;
|
|
7
|
+
permissionsIncludeNonInheritedPermissions(): boolean;
|
|
8
|
+
canAccessFolder(): Promise<boolean>;
|
|
9
|
+
canAccessFolderContent(): Promise<boolean>;
|
|
10
|
+
ensureCanAccessFolder(): Promise<void>;
|
|
11
|
+
ensureCanAccessFolderContent(): Promise<void>;
|
|
12
|
+
canManageFolderContent(): Promise<boolean>;
|
|
13
|
+
canManageFolderStructure(): Promise<boolean>;
|
|
14
|
+
canManageFolderPermissions(): Promise<boolean>;
|
|
15
|
+
getDefaultPermissions(permissions: FolderPermission[]): Promise<FolderPermission[]>;
|
|
16
|
+
listFolderLevelPermissions(): Promise<Array<{
|
|
17
|
+
id: string;
|
|
18
|
+
permissions: FolderPermission[];
|
|
19
|
+
}>>;
|
|
20
|
+
getFolderLevelPermissions(): Promise<FolderPermission[]>;
|
|
21
|
+
}
|
|
22
|
+
export declare const NoopFolderLevelPermissions: typeof NoopFolderLevelPermissionsImpl & {
|
|
23
|
+
__abstraction: import("@webiny/di").Abstraction<IFolderLevelPermissions>;
|
|
24
|
+
};
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { FolderLevelPermissions } from "./abstractions.js";
|
|
2
|
+
class NoopFolderLevelPermissionsImpl {
|
|
3
|
+
canUseFolderLevelPermissions() {
|
|
4
|
+
return false;
|
|
5
|
+
}
|
|
6
|
+
canUseTeams() {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
canCreateFolderInRoot() {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
permissionsIncludeNonInheritedPermissions() {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
async canAccessFolder() {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
async canAccessFolderContent() {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
async ensureCanAccessFolder() {}
|
|
22
|
+
async ensureCanAccessFolderContent() {}
|
|
23
|
+
async canManageFolderContent() {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
async canManageFolderStructure() {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
async canManageFolderPermissions() {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
async getDefaultPermissions(permissions) {
|
|
33
|
+
return permissions;
|
|
34
|
+
}
|
|
35
|
+
async listFolderLevelPermissions() {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
async getFolderLevelPermissions() {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const NoopFolderLevelPermissions = FolderLevelPermissions.createImplementation({
|
|
43
|
+
implementation: NoopFolderLevelPermissionsImpl,
|
|
44
|
+
dependencies: []
|
|
45
|
+
});
|
|
46
|
+
export { NoopFolderLevelPermissions };
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=NoopFolderLevelPermissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.js","sources":["../../../../src/features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.ts"],"sourcesContent":["import { FolderLevelPermissions, type IFolderLevelPermissions } from \"./abstractions.js\";\nimport type { FolderPermission } from \"~/types.js\";\n\nclass NoopFolderLevelPermissionsImpl implements IFolderLevelPermissions {\n canUseFolderLevelPermissions(): boolean {\n return false;\n }\n\n canUseTeams(): boolean {\n return false;\n }\n\n canCreateFolderInRoot(): boolean {\n return true;\n }\n\n permissionsIncludeNonInheritedPermissions(): boolean {\n return false;\n }\n\n async canAccessFolder(): Promise<boolean> {\n return true;\n }\n\n async canAccessFolderContent(): Promise<boolean> {\n return true;\n }\n\n async ensureCanAccessFolder(): Promise<void> {\n return;\n }\n\n async ensureCanAccessFolderContent(): Promise<void> {\n return;\n }\n\n async canManageFolderContent(): Promise<boolean> {\n return true;\n }\n\n async canManageFolderStructure(): Promise<boolean> {\n return true;\n }\n\n async canManageFolderPermissions(): Promise<boolean> {\n return true;\n }\n\n async getDefaultPermissions(permissions: FolderPermission[]): Promise<FolderPermission[]> {\n return permissions;\n }\n\n async listFolderLevelPermissions(): Promise<\n Array<{ id: string; permissions: FolderPermission[] }>\n > {\n return [];\n }\n\n async getFolderLevelPermissions(): Promise<FolderPermission[]> {\n return [];\n }\n}\n\nexport const NoopFolderLevelPermissions = FolderLevelPermissions.createImplementation({\n implementation: NoopFolderLevelPermissionsImpl,\n dependencies: []\n});\n"],"names":["NoopFolderLevelPermissionsImpl","permissions","NoopFolderLevelPermissions","FolderLevelPermissions"],"mappings":";AAGA,MAAMA;IACF,+BAAwC;QACpC,OAAO;IACX;IAEA,cAAuB;QACnB,OAAO;IACX;IAEA,wBAAiC;QAC7B,OAAO;IACX;IAEA,4CAAqD;QACjD,OAAO;IACX;IAEA,MAAM,kBAAoC;QACtC,OAAO;IACX;IAEA,MAAM,yBAA2C;QAC7C,OAAO;IACX;IAEA,MAAM,wBAAuC,CAE7C;IAEA,MAAM,+BAA8C,CAEpD;IAEA,MAAM,yBAA2C;QAC7C,OAAO;IACX;IAEA,MAAM,2BAA6C;QAC/C,OAAO;IACX;IAEA,MAAM,6BAA+C;QACjD,OAAO;IACX;IAEA,MAAM,sBAAsBC,WAA+B,EAA+B;QACtF,OAAOA;IACX;IAEA,MAAM,6BAEJ;QACE,OAAO,EAAE;IACb;IAEA,MAAM,4BAAyD;QAC3D,OAAO,EAAE;IACb;AACJ;AAEO,MAAMC,6BAA6BC,uBAAuB,oBAAoB,CAAC;IAClF,gBAAgBH;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -5,7 +5,7 @@ declare class DeleteFolderWithFolderLevelPermissionsImpl implements DeleteFolder
|
|
|
5
5
|
private folderLevelPermissions;
|
|
6
6
|
private readonly decoretee;
|
|
7
7
|
constructor(folderLevelPermissions: FolderLevelPermissions.Interface, decoretee: DeleteFolderUseCase.Interface);
|
|
8
|
-
execute(id: string): Promise<Result<void, never> | Result<never, import("../../../../domain/folder/errors.js").
|
|
8
|
+
execute(id: string): Promise<Result<void, never> | Result<never, import("../../../../domain/folder/errors.js").FolderNotAuthorizedError | import("../../../../domain/folder/errors.js").FolderNotEmptyError | import("../../../../domain/folder/errors.js").FolderNotFoundError | import("../../../../domain/folder/errors.js").FolderPersistenceError>>;
|
|
9
9
|
}
|
|
10
10
|
export declare const DeleteFolderWithFolderLevelPermissions: typeof DeleteFolderWithFolderLevelPermissionsImpl;
|
|
11
11
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js","sources":["../../../../src/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.ts"],"sourcesContent":["import { FolderLevelPermissions } from \"~/features/flp/FolderLevelPermissions/index.js\";\nimport { ListFoldersUseCase } from \"~/features/folder/ListFolders/index.js\";\nimport { EnsureFolderIsEmpty as Abstraction } from \"~/features/folder/EnsureFolderIsEmpty/abstractions.js\";\nimport { Logger } from \"@webiny/api-core/exports/api/logger.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { FolderNotAuthorizedError, FolderNotEmptyError } from \"~/domain/folder/errors.js\";\nimport { Result } from \"@webiny/feature/api\";\n\nclass EnsureFolderIsEmptyImpl implements Abstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private folderLevelPermissions: FolderLevelPermissions.Interface,\n private listFoldersUseCase: ListFoldersUseCase.Interface,\n private logger: Logger.Interface\n ) {}\n\n async execute(\n type: string,\n id: string,\n hasContentCallback: Abstraction.HasContentCallback\n ): Abstraction.Return {\n const hasFoldersCallback = async () => {\n const result = await this.listFoldersUseCase.execute({\n where: {\n type,\n parentId: id\n },\n limit: 1\n });\n if (result.isFail()) {\n this.logger.error(result.error);\n return
|
|
1
|
+
{"version":3,"file":"features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js","sources":["../../../../src/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.ts"],"sourcesContent":["import { FolderLevelPermissions } from \"~/features/flp/FolderLevelPermissions/index.js\";\nimport { ListFoldersUseCase } from \"~/features/folder/ListFolders/index.js\";\nimport { EnsureFolderIsEmpty as Abstraction } from \"~/features/folder/EnsureFolderIsEmpty/abstractions.js\";\nimport { Logger } from \"@webiny/api-core/exports/api/logger.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { FolderNotAuthorizedError, FolderNotEmptyError } from \"~/domain/folder/errors.js\";\nimport { Result } from \"@webiny/feature/api\";\n\nclass EnsureFolderIsEmptyImpl implements Abstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private folderLevelPermissions: FolderLevelPermissions.Interface,\n private listFoldersUseCase: ListFoldersUseCase.Interface,\n private logger: Logger.Interface\n ) {}\n\n async execute(\n type: string,\n id: string,\n hasContentCallback: Abstraction.HasContentCallback\n ): Abstraction.Return {\n const hasFoldersCallback = async () => {\n const result = await this.listFoldersUseCase.execute({\n where: {\n type,\n parentId: id\n },\n limit: 1\n });\n if (result.isFail()) {\n this.logger.error(result.error);\n // Report the folder as non-empty so a failed lookup cannot green-light a delete.\n return true;\n }\n\n const { folders } = result.value;\n\n return folders.length > 0;\n };\n\n const [hasFolders, hasContent] = await Promise.all([\n hasFoldersCallback(),\n hasContentCallback()\n ]);\n\n if (hasFolders || hasContent) {\n return Result.fail(new FolderNotEmptyError());\n }\n\n // Let's also check if there are folders / content that are not visible because of folder permissions.\n if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) {\n // If folder level permissions are not enabled, we can skip this check. This is because\n // in that case, all folders and content are visible to the user.\n return Result.ok();\n }\n\n const [hasInvisibleFolders, hasInvisibleContent] =\n await this.identityContext.withoutAuthorization(async () => {\n const [hasFolders, hasContent] = await Promise.all([\n hasFoldersCallback(),\n hasContentCallback()\n ]);\n return [hasFolders, hasContent];\n });\n\n // In case there are invisible folders or content, we'll throw a different error.\n // This is to prevent users from deleting folders that contain content they can't see.\n if (hasInvisibleFolders || hasInvisibleContent) {\n return Result.fail(new FolderNotAuthorizedError());\n }\n\n return Result.ok();\n }\n}\n\nexport const EnsureFolderIsEmpty = Abstraction.createImplementation({\n implementation: EnsureFolderIsEmptyImpl,\n dependencies: [IdentityContext, FolderLevelPermissions, ListFoldersUseCase, Logger]\n});\n"],"names":["EnsureFolderIsEmptyImpl","identityContext","folderLevelPermissions","listFoldersUseCase","logger","type","id","hasContentCallback","hasFoldersCallback","result","folders","hasFolders","hasContent","Promise","Result","FolderNotEmptyError","hasInvisibleFolders","hasInvisibleContent","FolderNotAuthorizedError","EnsureFolderIsEmpty","Abstraction","IdentityContext","FolderLevelPermissions","ListFoldersUseCase","Logger"],"mappings":";;;;;;;AAQA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,sBAAwD,EACxDC,kBAAgD,EAChDC,MAAwB,CAClC;aAJUH,eAAe,GAAfA;aACAC,sBAAsB,GAAtBA;aACAC,kBAAkB,GAAlBA;aACAC,MAAM,GAANA;IACT;IAEH,MAAM,QACFC,IAAY,EACZC,EAAU,EACVC,kBAAkD,EAChC;QAClB,MAAMC,qBAAqB;YACvB,MAAMC,SAAS,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBACjD,OAAO;oBACHJ;oBACA,UAAUC;gBACd;gBACA,OAAO;YACX;YACA,IAAIG,OAAO,MAAM,IAAI;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAACA,OAAO,KAAK;gBAE9B,OAAO;YACX;YAEA,MAAM,EAAEC,OAAO,EAAE,GAAGD,OAAO,KAAK;YAEhC,OAAOC,QAAQ,MAAM,GAAG;QAC5B;QAEA,MAAM,CAACC,YAAYC,WAAW,GAAG,MAAMC,QAAQ,GAAG,CAAC;YAC/CL;YACAD;SACH;QAED,IAAII,cAAcC,YACd,OAAOE,OAAO,IAAI,CAAC,IAAIC;QAI3B,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,4BAA4B,IAGzD,OAAOD,OAAO,EAAE;QAGpB,MAAM,CAACE,qBAAqBC,oBAAoB,GAC5C,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC;YAC5C,MAAM,CAACN,YAAYC,WAAW,GAAG,MAAMC,QAAQ,GAAG,CAAC;gBAC/CL;gBACAD;aACH;YACD,OAAO;gBAACI;gBAAYC;aAAW;QACnC;QAIJ,IAAII,uBAAuBC,qBACvB,OAAOH,OAAO,IAAI,CAAC,IAAII;QAG3B,OAAOJ,OAAO,EAAE;IACpB;AACJ;AAEO,MAAMK,0CAAsBC,oBAAAA,oBAAgC,CAAC;IAChE,gBAAgBpB;IAChB,cAAc;QAACqB;QAAiBC;QAAwBC;QAAoBC;KAAO;AACvF"}
|
|
@@ -26,7 +26,10 @@ class ModelFolderBeforeDeleteHandlerImpl {
|
|
|
26
26
|
},
|
|
27
27
|
limit: 1
|
|
28
28
|
});
|
|
29
|
-
if (result.isFail())
|
|
29
|
+
if (result.isFail()) {
|
|
30
|
+
console.error(result.error.message);
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
30
33
|
const { entries } = result.value;
|
|
31
34
|
return entries.length > 0;
|
|
32
35
|
});
|
package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js","sources":["../../../../src/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { FolderBeforeDeleteEventHandler } from \"~/features/folder/DeleteFolder/abstractions.js\";\nimport type { FolderBeforeDeleteEvent } from \"~/features/folder/DeleteFolder/events.js\";\nimport { EnsureFolderIsEmpty } from \"~/features/folder/EnsureFolderIsEmpty/abstractions.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { ListEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries/abstractions.js\";\n\nclass ModelFolderBeforeDeleteHandlerImpl implements FolderBeforeDeleteEventHandler.Interface {\n constructor(\n private ensureFolderIsEmpty: EnsureFolderIsEmpty.Interface,\n private getModel: GetModelUseCase.Interface,\n private listEntries: ListEntriesUseCase.Interface\n ) {}\n\n async handle(event: FolderBeforeDeleteEvent): Promise<void> {\n const { folder } = event.payload;\n\n const { id, type } = folder;\n\n const modelId = type.split(\":\")[1];\n if (!modelId) {\n return;\n }\n\n const modelResult = await this.getModel.execute(modelId);\n if (modelResult.isFail()) {\n return;\n }\n\n const result = await this.ensureFolderIsEmpty.execute(type, id, async () => {\n const result = await this.listEntries.execute(modelResult.value, {\n where: {\n latest: true,\n wbyAco_location: {\n folderId: id\n }\n },\n limit: 1\n });\n if (result.isFail()) {\n
|
|
1
|
+
{"version":3,"file":"features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js","sources":["../../../../src/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { FolderBeforeDeleteEventHandler } from \"~/features/folder/DeleteFolder/abstractions.js\";\nimport type { FolderBeforeDeleteEvent } from \"~/features/folder/DeleteFolder/events.js\";\nimport { EnsureFolderIsEmpty } from \"~/features/folder/EnsureFolderIsEmpty/abstractions.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { ListEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries/abstractions.js\";\n\nclass ModelFolderBeforeDeleteHandlerImpl implements FolderBeforeDeleteEventHandler.Interface {\n constructor(\n private ensureFolderIsEmpty: EnsureFolderIsEmpty.Interface,\n private getModel: GetModelUseCase.Interface,\n private listEntries: ListEntriesUseCase.Interface\n ) {}\n\n async handle(event: FolderBeforeDeleteEvent): Promise<void> {\n const { folder } = event.payload;\n\n const { id, type } = folder;\n\n const modelId = type.split(\":\")[1];\n if (!modelId) {\n return;\n }\n\n const modelResult = await this.getModel.execute(modelId);\n if (modelResult.isFail()) {\n return;\n }\n\n const result = await this.ensureFolderIsEmpty.execute(type, id, async () => {\n const result = await this.listEntries.execute(modelResult.value, {\n where: {\n latest: true,\n wbyAco_location: {\n folderId: id\n }\n },\n limit: 1\n });\n if (result.isFail()) {\n console.error(result.error.message);\n return true;\n }\n\n const { entries } = result.value;\n\n return entries.length > 0;\n });\n\n if (result.isFail()) {\n throw WebinyError.from(result.error, {\n message: \"Error while ensuring HCMS folder is empty before delete.\",\n code: \"ACO_BEFORE_FOLDER_DELETE_HCMS_HANDLER\"\n });\n }\n }\n}\n\nexport const ModelFolderBeforeDeleteHandler = FolderBeforeDeleteEventHandler.createImplementation({\n implementation: ModelFolderBeforeDeleteHandlerImpl,\n dependencies: [EnsureFolderIsEmpty, GetModelUseCase, ListEntriesUseCase]\n});\n"],"names":["ModelFolderBeforeDeleteHandlerImpl","ensureFolderIsEmpty","getModel","listEntries","event","folder","id","type","modelId","modelResult","result","console","entries","WebinyError","ModelFolderBeforeDeleteHandler","FolderBeforeDeleteEventHandler","EnsureFolderIsEmpty","GetModelUseCase","ListEntriesUseCase"],"mappings":";;;;;AAOA,MAAMA;IACF,YACYC,mBAAkD,EAClDC,QAAmC,EACnCC,WAAyC,CACnD;aAHUF,mBAAmB,GAAnBA;aACAC,QAAQ,GAARA;aACAC,WAAW,GAAXA;IACT;IAEH,MAAM,OAAOC,KAA8B,EAAiB;QACxD,MAAM,EAAEC,MAAM,EAAE,GAAGD,MAAM,OAAO;QAEhC,MAAM,EAAEE,EAAE,EAAEC,IAAI,EAAE,GAAGF;QAErB,MAAMG,UAAUD,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE;QAClC,IAAI,CAACC,SACD;QAGJ,MAAMC,cAAc,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAACD;QAChD,IAAIC,YAAY,MAAM,IAClB;QAGJ,MAAMC,SAAS,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAACH,MAAMD,IAAI;YAC5D,MAAMI,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAACD,YAAY,KAAK,EAAE;gBAC7D,OAAO;oBACH,QAAQ;oBACR,iBAAiB;wBACb,UAAUH;oBACd;gBACJ;gBACA,OAAO;YACX;YACA,IAAII,OAAO,MAAM,IAAI;gBACjBC,QAAQ,KAAK,CAACD,OAAO,KAAK,CAAC,OAAO;gBAClC,OAAO;YACX;YAEA,MAAM,EAAEE,OAAO,EAAE,GAAGF,OAAO,KAAK;YAEhC,OAAOE,QAAQ,MAAM,GAAG;QAC5B;QAEA,IAAIF,OAAO,MAAM,IACb,MAAMG,YAAY,IAAI,CAACH,OAAO,KAAK,EAAE;YACjC,SAAS;YACT,MAAM;QACV;IAER;AACJ;AAEO,MAAMI,iCAAiCC,+BAA+B,oBAAoB,CAAC;IAC9F,gBAAgBf;IAChB,cAAc;QAACgB;QAAqBC;QAAiBC;KAAmB;AAC5E"}
|
|
@@ -6,8 +6,13 @@ declare class GetFolderWithFolderLevelPermissionsImpl implements GetFolderUseCas
|
|
|
6
6
|
private folderLevelPermissions;
|
|
7
7
|
private readonly decoretee;
|
|
8
8
|
constructor(folderLevelPermissions: FolderLevelPermissions.Interface, decoretee: GetFolderUseCase.Interface);
|
|
9
|
-
execute(id: string): Promise<Result<never, import("~/domain/folder/errors.js").FolderNotFoundError |
|
|
10
|
-
|
|
9
|
+
execute(id: string): Promise<Result<never, FolderNotAuthorizedError | import("~/domain/folder/errors.js").FolderNotFoundError | import("~/domain/folder/errors.js").FolderPersistenceError> | Result<{
|
|
10
|
+
title: string;
|
|
11
|
+
slug: string;
|
|
12
|
+
type: string;
|
|
13
|
+
parentId?: string | null;
|
|
14
|
+
path: string;
|
|
15
|
+
extensions?: Record<string, any>;
|
|
11
16
|
id: string;
|
|
12
17
|
createdOn: string;
|
|
13
18
|
modifiedOn: string | null;
|
|
@@ -15,12 +20,7 @@ declare class GetFolderWithFolderLevelPermissionsImpl implements GetFolderUseCas
|
|
|
15
20
|
createdBy: import("../../../../types.js").User;
|
|
16
21
|
modifiedBy: import("../../../../types.js").User | null;
|
|
17
22
|
savedBy: import("../../../../types.js").User;
|
|
18
|
-
|
|
19
|
-
slug: string;
|
|
20
|
-
type: string;
|
|
21
|
-
parentId?: string | null;
|
|
22
|
-
path: string;
|
|
23
|
-
extensions?: Record<string, any>;
|
|
23
|
+
permissions: import("@webiny/shared-aco/flp/flp.types.js").FolderPermission[];
|
|
24
24
|
}, never>>;
|
|
25
25
|
}
|
|
26
26
|
export declare const GetFolderWithFolderLevelPermissions: typeof GetFolderWithFolderLevelPermissionsImpl & {
|
|
@@ -4,3 +4,7 @@ export declare const FilterStorageOperations: import("@webiny/di").Abstraction<i
|
|
|
4
4
|
export declare namespace FilterStorageOperations {
|
|
5
5
|
type Interface = IAcoStorageOperations["filter"];
|
|
6
6
|
}
|
|
7
|
+
export declare const FlpStorageOperations: import("@webiny/di").Abstraction<import("~/types.js").AcoFolderLevelPermissionsStorageOperations>;
|
|
8
|
+
export declare namespace FlpStorageOperations {
|
|
9
|
+
type Interface = IAcoStorageOperations["flp"];
|
|
10
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
2
|
const FilterStorageOperations = createAbstraction("FilterStorageOperations");
|
|
3
|
-
|
|
3
|
+
const FlpStorageOperations = createAbstraction("FlpStorageOperations");
|
|
4
|
+
export { FilterStorageOperations, FlpStorageOperations };
|
|
4
5
|
|
|
5
6
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/folder/shared/abstractions.js","sources":["../../../../src/features/folder/shared/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { AcoStorageOperations as IAcoStorageOperations } from \"~/types.js\";\n\n/** Storage operations for folder filtering. */\nexport const FilterStorageOperations =\n createAbstraction<IAcoStorageOperations[\"filter\"]>(\"FilterStorageOperations\");\n\nexport namespace FilterStorageOperations {\n export type Interface = IAcoStorageOperations[\"filter\"];\n}\n"],"names":["FilterStorageOperations","createAbstraction"],"mappings":";AAIO,MAAMA,0BACTC,kBAAmD"}
|
|
1
|
+
{"version":3,"file":"features/folder/shared/abstractions.js","sources":["../../../../src/features/folder/shared/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { AcoStorageOperations as IAcoStorageOperations } from \"~/types.js\";\n\n/** Storage operations for folder filtering. */\nexport const FilterStorageOperations =\n createAbstraction<IAcoStorageOperations[\"filter\"]>(\"FilterStorageOperations\");\n\nexport namespace FilterStorageOperations {\n export type Interface = IAcoStorageOperations[\"filter\"];\n}\n\nexport const FlpStorageOperations =\n createAbstraction<IAcoStorageOperations[\"flp\"]>(\"FlpStorageOperations\");\n\nexport namespace FlpStorageOperations {\n export type Interface = IAcoStorageOperations[\"flp\"];\n}\n"],"names":["FilterStorageOperations","createAbstraction","FlpStorageOperations"],"mappings":";AAIO,MAAMA,0BACTC,kBAAmD;AAMhD,MAAMC,uBACTD,kBAAgD"}
|
package/filter/filter.so.d.ts
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { HeadlessCms } from "@webiny/api-headless-cms/types/index.js";
|
|
2
|
+
import type { Security } from "@webiny/api-core/types/security.js";
|
|
3
|
+
import type { Container } from "@webiny/di";
|
|
4
|
+
interface CreateFilterOperationsParams {
|
|
5
|
+
cms: HeadlessCms;
|
|
6
|
+
security: Security;
|
|
7
|
+
container: Container;
|
|
8
|
+
}
|
|
2
9
|
import type { AcoFilterStorageOperations } from "./filter.types.js";
|
|
3
|
-
export declare const createFilterOperations: (params:
|
|
10
|
+
export declare const createFilterOperations: (params: CreateFilterOperationsParams) => AcoFilterStorageOperations;
|
|
11
|
+
export {};
|
package/filter/filter.so.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter/filter.so.js","sources":["../../src/filter/filter.so.ts"],"sourcesContent":["import omit from \"lodash/omit.js\";\nimport WebinyError from \"@webiny/error\";\nimport { FILTER_MODEL_ID } from \"./filter.model.js\";\nimport type {
|
|
1
|
+
{"version":3,"file":"filter/filter.so.js","sources":["../../src/filter/filter.so.ts"],"sourcesContent":["import omit from \"lodash/omit.js\";\nimport WebinyError from \"@webiny/error\";\nimport { FILTER_MODEL_ID } from \"./filter.model.js\";\nimport type { HeadlessCms } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { Security } from \"@webiny/api-core/types/security.js\";\nimport type { Container } from \"@webiny/di\";\n\ninterface CreateFilterOperationsParams {\n cms: HeadlessCms;\n security: Security;\n container: Container;\n}\nimport { createListSort } from \"~/utils/createListSort.js\";\nimport { createOperationsWrapper } from \"~/utils/createOperationsWrapper.js\";\nimport { pickEntryFieldValues } from \"~/utils/pickEntryFieldValues.js\";\nimport type { AcoFilterStorageOperations, Filter } from \"./filter.types.js\";\nimport { ENTRY_META_FIELDS } from \"@webiny/api-headless-cms/constants.js\";\nimport { CmsSortMapper, CmsWhereMapper } from \"@webiny/api-headless-cms\";\n\nexport const createFilterOperations = (\n params: CreateFilterOperationsParams\n): AcoFilterStorageOperations => {\n const { cms, security, container } = params;\n\n const { withModel } = createOperationsWrapper({\n ...params,\n modelName: FILTER_MODEL_ID\n });\n\n const cmsWhereMapper = container.resolve(CmsWhereMapper);\n const cmsSortMapper = container.resolve(CmsSortMapper);\n\n return {\n getFilter({ id }) {\n return withModel(async model => {\n const entry = await cms.getEntryById(model, id);\n\n if (!entry) {\n throw new WebinyError(\"Could not load filter.\", \"GET_FILTER_ERROR\", {\n id\n });\n }\n\n return pickEntryFieldValues(entry);\n });\n },\n listFilters(params) {\n return withModel(async model => {\n const { sort, where } = params;\n const createdBy = security.getIdentity().id;\n\n const [entries, meta] = await cms.listLatestEntries(model, {\n ...params,\n sort: cmsSortMapper.map({\n input: createListSort(sort),\n fields: model.fields\n }),\n where: cmsWhereMapper.map({\n input: {\n ...where,\n createdBy\n },\n fields: model.fields\n })\n });\n\n return [entries.map(pickEntryFieldValues<Filter>), meta];\n });\n },\n createFilter({ data }) {\n return withModel(async model => {\n const entry = await cms.createEntry(model, {\n id: data.id,\n values: data\n });\n return pickEntryFieldValues(entry);\n });\n },\n updateFilter({ id, data }) {\n return withModel(async model => {\n const original = await cms.getEntryById(model, id);\n\n const input = {\n /**\n * We are omitting the standard entry meta fields:\n * we don't want to override them with the ones coming from the `original` entry.\n */\n ...omit(original, ENTRY_META_FIELDS),\n values: {\n ...original.values,\n ...data\n }\n };\n\n const entry = await cms.updateEntry(model, original.id, input);\n return pickEntryFieldValues(entry);\n });\n },\n deleteFilter({ id }) {\n return withModel(async model => {\n await cms.deleteEntry(model, id);\n return true;\n });\n }\n };\n};\n"],"names":["createFilterOperations","params","cms","security","container","withModel","createOperationsWrapper","FILTER_MODEL_ID","cmsWhereMapper","CmsWhereMapper","cmsSortMapper","CmsSortMapper","id","model","entry","WebinyError","pickEntryFieldValues","sort","where","createdBy","entries","meta","createListSort","data","original","input","omit","ENTRY_META_FIELDS"],"mappings":";;;;;;;;AAmBO,MAAMA,yBAAyB,CAClCC;IAEA,MAAM,EAAEC,GAAG,EAAEC,QAAQ,EAAEC,SAAS,EAAE,GAAGH;IAErC,MAAM,EAAEI,SAAS,EAAE,GAAGC,wBAAwB;QAC1C,GAAGL,MAAM;QACT,WAAWM;IACf;IAEA,MAAMC,iBAAiBJ,UAAU,OAAO,CAACK;IACzC,MAAMC,gBAAgBN,UAAU,OAAO,CAACO;IAExC,OAAO;QACH,WAAU,EAAEC,EAAE,EAAE;YACZ,OAAOP,UAAU,OAAMQ;gBACnB,MAAMC,QAAQ,MAAMZ,IAAI,YAAY,CAACW,OAAOD;gBAE5C,IAAI,CAACE,OACD,MAAM,IAAIC,MAAY,0BAA0B,oBAAoB;oBAChEH;gBACJ;gBAGJ,OAAOI,qBAAqBF;YAChC;QACJ;QACA,aAAYb,MAAM;YACd,OAAOI,UAAU,OAAMQ;gBACnB,MAAM,EAAEI,IAAI,EAAEC,KAAK,EAAE,GAAGjB;gBACxB,MAAMkB,YAAYhB,SAAS,WAAW,GAAG,EAAE;gBAE3C,MAAM,CAACiB,SAASC,KAAK,GAAG,MAAMnB,IAAI,iBAAiB,CAACW,OAAO;oBACvD,GAAGZ,MAAM;oBACT,MAAMS,cAAc,GAAG,CAAC;wBACpB,OAAOY,eAAeL;wBACtB,QAAQJ,MAAM,MAAM;oBACxB;oBACA,OAAOL,eAAe,GAAG,CAAC;wBACtB,OAAO;4BACH,GAAGU,KAAK;4BACRC;wBACJ;wBACA,QAAQN,MAAM,MAAM;oBACxB;gBACJ;gBAEA,OAAO;oBAACO,QAAQ,GAAG,CAACJ;oBAA+BK;iBAAK;YAC5D;QACJ;QACA,cAAa,EAAEE,IAAI,EAAE;YACjB,OAAOlB,UAAU,OAAMQ;gBACnB,MAAMC,QAAQ,MAAMZ,IAAI,WAAW,CAACW,OAAO;oBACvC,IAAIU,KAAK,EAAE;oBACX,QAAQA;gBACZ;gBACA,OAAOP,qBAAqBF;YAChC;QACJ;QACA,cAAa,EAAEF,EAAE,EAAEW,IAAI,EAAE;YACrB,OAAOlB,UAAU,OAAMQ;gBACnB,MAAMW,WAAW,MAAMtB,IAAI,YAAY,CAACW,OAAOD;gBAE/C,MAAMa,QAAQ;oBAKV,GAAGC,KAAKF,UAAUG,kBAAkB;oBACpC,QAAQ;wBACJ,GAAGH,SAAS,MAAM;wBAClB,GAAGD,IAAI;oBACX;gBACJ;gBAEA,MAAMT,QAAQ,MAAMZ,IAAI,WAAW,CAACW,OAAOW,SAAS,EAAE,EAAEC;gBACxD,OAAOT,qBAAqBF;YAChC;QACJ;QACA,cAAa,EAAEF,EAAE,EAAE;YACf,OAAOP,UAAU,OAAMQ;gBACnB,MAAMX,IAAI,WAAW,CAACW,OAAOD;gBAC7B,OAAO;YACX;QACJ;IACJ;AACJ"}
|
package/flp/index.d.ts
CHANGED
package/flp/index.js
CHANGED
|
@@ -8,9 +8,9 @@ declare class CreateFlpTaskImpl implements TaskDefinition.Interface<ICreateFlpTa
|
|
|
8
8
|
readonly description = "Synchronizes the FLP catalog by creating the FLP record based on the provided folder.";
|
|
9
9
|
readonly databaseLogs = false;
|
|
10
10
|
readonly isPrivate = true;
|
|
11
|
-
readonly selfCleanup: ("
|
|
11
|
+
readonly selfCleanup: ("onAbort" | "onSuccess")[];
|
|
12
12
|
constructor(createFlp: CreateFlpUseCase.Interface);
|
|
13
|
-
run({ input, controller }: TaskDefinition.RunParams<ICreateFlpTaskInput>): Promise<import("@webiny/api-core/features/task/TaskDefinition/abstractions").
|
|
13
|
+
run({ input, controller }: TaskDefinition.RunParams<ICreateFlpTaskInput>): Promise<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskResultAborted | import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskResultError | TaskDefinition.ResultContinue<ICreateFlpTaskInput> | TaskDefinition.ResultDone<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
|
|
14
14
|
}
|
|
15
15
|
export declare const CreateFlpTask: typeof CreateFlpTaskImpl & {
|
|
16
16
|
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskDefinition<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
|
|
@@ -8,9 +8,9 @@ declare class DeleteFlpTaskImpl implements TaskDefinition.Interface<IDeleteFlpTa
|
|
|
8
8
|
readonly description = "Synchronizes the FLP catalog by deleting the FLP record based on the provided folder.";
|
|
9
9
|
readonly databaseLogs = false;
|
|
10
10
|
readonly isPrivate = true;
|
|
11
|
-
readonly selfCleanup: ("
|
|
11
|
+
readonly selfCleanup: ("onAbort" | "onSuccess")[];
|
|
12
12
|
constructor(deleteFlp: DeleteFlpUseCase.Interface);
|
|
13
|
-
run({ input, controller }: TaskDefinition.RunParams<IDeleteFlpTaskInput>): Promise<import("@webiny/api-core/features/task/TaskDefinition/abstractions").
|
|
13
|
+
run({ input, controller }: TaskDefinition.RunParams<IDeleteFlpTaskInput>): Promise<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskResultAborted | import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskResultError | TaskDefinition.ResultContinue<IDeleteFlpTaskInput> | TaskDefinition.ResultDone<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
|
|
14
14
|
}
|
|
15
15
|
export declare const DeleteFlpTask: typeof DeleteFlpTaskImpl & {
|
|
16
16
|
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskDefinition<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
|
|
@@ -12,9 +12,9 @@ declare class SyncFlpTaskImpl implements TaskDefinition.Interface<ISyncFlpTaskIn
|
|
|
12
12
|
readonly description = "Synchronizes the FLP catalog by updating the FLP record and its descendants.";
|
|
13
13
|
readonly databaseLogs = false;
|
|
14
14
|
readonly isPrivate = true;
|
|
15
|
-
readonly selfCleanup: ("
|
|
15
|
+
readonly selfCleanup: ("onAbort" | "onSuccess")[];
|
|
16
16
|
constructor(getFolder: GetFolderUseCase.Interface, listFolders: ListFoldersUseCase.Interface, listModels: ListModelsUseCase.Interface);
|
|
17
|
-
run({ input, controller }: TaskDefinition.RunParams<ISyncFlpTaskInput>): Promise<import("@webiny/api-core/features/task/TaskDefinition/abstractions").
|
|
17
|
+
run({ input, controller }: TaskDefinition.RunParams<ISyncFlpTaskInput>): Promise<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskResultAborted | import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskResultError | TaskDefinition.ResultDone<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
|
|
18
18
|
}
|
|
19
19
|
export declare const SyncFlpTask: typeof SyncFlpTaskImpl & {
|
|
20
20
|
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskDefinition<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
|
|
@@ -51,7 +51,13 @@ class SyncFlpTaskImpl {
|
|
|
51
51
|
}
|
|
52
52
|
});
|
|
53
53
|
if (result.isFail()) {
|
|
54
|
-
await controller.logger.error(
|
|
54
|
+
await controller.logger.error({
|
|
55
|
+
message: `Failed to list root folders for type ${folderType}`,
|
|
56
|
+
data: {
|
|
57
|
+
type: folderType,
|
|
58
|
+
error: result.error
|
|
59
|
+
}
|
|
60
|
+
});
|
|
55
61
|
continue;
|
|
56
62
|
}
|
|
57
63
|
const { folders } = result.value;
|