@webiny/api-headless-cms-bulk-actions 6.4.11 → 6.6.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 (77) hide show
  1. package/HcmsBulkActionsFeature.d.ts +7 -0
  2. package/HcmsBulkActionsFeature.js +32 -0
  3. package/HcmsBulkActionsFeature.js.map +1 -0
  4. package/exports/api/cms/entry.d.ts +1 -0
  5. package/exports/api/cms/entry.js +1 -0
  6. package/features/DeleteEntriesBulkAction/DeleteEntriesBulkAction.d.ts +1 -1
  7. package/features/DeleteEntriesBulkAction/DeleteEntriesBulkAction.js +0 -1
  8. package/features/DeleteEntriesBulkAction/DeleteEntriesBulkAction.js.map +1 -1
  9. package/features/EntriesBulkAction/abstractions.d.ts +7 -7
  10. package/features/EntriesBulkAction/abstractions.js.map +1 -1
  11. package/features/EntriesBulkAction/createBulkActionTasks.d.ts +47 -4
  12. package/features/EntriesBulkAction/createBulkActionTasks.js +132 -117
  13. package/features/EntriesBulkAction/createBulkActionTasks.js.map +1 -1
  14. package/features/EntriesBulkAction/internals/ChildTasksCleanup.d.ts +2 -2
  15. package/features/EntriesBulkAction/internals/ChildTasksCleanup.js +8 -8
  16. package/features/EntriesBulkAction/internals/ChildTasksCleanup.js.map +1 -1
  17. package/features/EntriesBulkAction/internals/CreateTasksByModel.d.ts +4 -4
  18. package/features/EntriesBulkAction/internals/CreateTasksByModel.js +7 -6
  19. package/features/EntriesBulkAction/internals/CreateTasksByModel.js.map +1 -1
  20. package/features/EntriesBulkAction/internals/ProcessTask.d.ts +1 -1
  21. package/features/EntriesBulkAction/internals/ProcessTasksByModel.d.ts +3 -3
  22. package/features/EntriesBulkAction/internals/ProcessTasksByModel.js +3 -3
  23. package/features/EntriesBulkAction/internals/ProcessTasksByModel.js.map +1 -1
  24. package/features/EntriesBulkAction/internals/TaskCache.d.ts +4 -4
  25. package/features/EntriesBulkAction/internals/TaskCache.js +2 -2
  26. package/features/EntriesBulkAction/internals/TaskCache.js.map +1 -1
  27. package/features/MoveToFolderBulkAction/MoveToFolderBulkAction.d.ts +1 -1
  28. package/features/MoveToFolderBulkAction/MoveToFolderBulkAction.js +3 -2
  29. package/features/MoveToFolderBulkAction/MoveToFolderBulkAction.js.map +1 -1
  30. package/features/MoveToTrashBulkAction/MoveToTrashBulkAction.d.ts +1 -1
  31. package/features/MoveToTrashBulkAction/MoveToTrashBulkAction.js +0 -1
  32. package/features/MoveToTrashBulkAction/MoveToTrashBulkAction.js.map +1 -1
  33. package/features/PublishEntriesBulkAction/PublishEntriesBulkAction.d.ts +1 -1
  34. package/features/PublishEntriesBulkAction/PublishEntriesBulkAction.js +3 -2
  35. package/features/PublishEntriesBulkAction/PublishEntriesBulkAction.js.map +1 -1
  36. package/features/RestoreEntriesBulkAction/RestoreEntriesBulkAction.d.ts +1 -1
  37. package/features/RestoreEntriesBulkAction/RestoreEntriesBulkAction.js +0 -1
  38. package/features/RestoreEntriesBulkAction/RestoreEntriesBulkAction.js.map +1 -1
  39. package/features/UnpublishEntriesBulkAction/UnpublishEntriesBulkAction.d.ts +1 -1
  40. package/features/UnpublishEntriesBulkAction/UnpublishEntriesBulkAction.js +3 -2
  41. package/features/UnpublishEntriesBulkAction/UnpublishEntriesBulkAction.js.map +1 -1
  42. package/graphql/BulkActionsGraphQLSchema.d.ts +12 -0
  43. package/graphql/BulkActionsGraphQLSchema.js +106 -0
  44. package/graphql/BulkActionsGraphQLSchema.js.map +1 -0
  45. package/graphql/createBulkActionGraphQL.js +21 -18
  46. package/graphql/createBulkActionGraphQL.js.map +1 -1
  47. package/graphql/createDefaultGraphQL.d.ts +7 -2
  48. package/graphql/createDefaultGraphQL.js +41 -39
  49. package/graphql/createDefaultGraphQL.js.map +1 -1
  50. package/index.d.ts +2 -7
  51. package/index.js +1 -46
  52. package/package.json +18 -16
  53. package/tasks/EmptyTrashBinTaskDefinition.d.ts +1 -1
  54. package/tasks/EmptyTrashBinTaskDefinition.js +0 -6
  55. package/tasks/EmptyTrashBinTaskDefinition.js.map +1 -1
  56. package/types.d.ts +2 -0
  57. package/types.js.map +1 -1
  58. package/features/BulkActionContext/abstractions.d.ts +0 -5
  59. package/features/BulkActionContext/abstractions.js +0 -5
  60. package/features/BulkActionContext/abstractions.js.map +0 -1
  61. package/features/BulkActionContext/index.d.ts +0 -1
  62. package/features/BulkActionContext/index.js +0 -1
  63. package/handlers/eventBridgeEventHandler.d.ts +0 -1
  64. package/handlers/eventBridgeEventHandler.js +0 -28
  65. package/handlers/eventBridgeEventHandler.js.map +0 -1
  66. package/handlers/index.d.ts +0 -1
  67. package/handlers/index.js +0 -9
  68. package/handlers/index.js.map +0 -1
  69. package/handlers/setupEventsTenant.d.ts +0 -1
  70. package/handlers/setupEventsTenant.js +0 -10
  71. package/handlers/setupEventsTenant.js.map +0 -1
  72. package/index.js.map +0 -1
  73. package/tasks/createEmptyTrashBinsTask.d.ts +0 -1
  74. package/tasks/createEmptyTrashBinsTask.js +0 -8
  75. package/tasks/createEmptyTrashBinsTask.js.map +0 -1
  76. package/tasks/index.d.ts +0 -1
  77. package/tasks/index.js +0 -1
@@ -0,0 +1,7 @@
1
+ export interface HcmsBulkActionsFeatureConfig {
2
+ batchSize?: number;
3
+ }
4
+ export declare const HcmsBulkActionsFeature: {
5
+ name: string;
6
+ register(container: import("@webiny/di").Container, context?: HcmsBulkActionsFeatureConfig | undefined): void;
7
+ };
@@ -0,0 +1,32 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { EntriesBulkActionConfig } from "./features/EntriesBulkAction/abstractions.js";
3
+ import { BulkActionListTaskDefinition, BulkActionProcessTaskDefinition } from "./features/EntriesBulkAction/createBulkActionTasks.js";
4
+ import { DeleteEntriesBulkActionFeature } from "./features/DeleteEntriesBulkAction/feature.js";
5
+ import { MoveToFolderBulkActionFeature } from "./features/MoveToFolderBulkAction/feature.js";
6
+ import { MoveToTrashBulkActionFeature } from "./features/MoveToTrashBulkAction/feature.js";
7
+ import { PublishEntriesBulkActionFeature } from "./features/PublishEntriesBulkAction/feature.js";
8
+ import { UnpublishEntriesBulkActionFeature } from "./features/UnpublishEntriesBulkAction/feature.js";
9
+ import { RestoreEntriesBulkActionFeature } from "./features/RestoreEntriesBulkAction/feature.js";
10
+ import { EmptyTrashBinTaskDefinition } from "./tasks/EmptyTrashBinTaskDefinition.js";
11
+ import { BulkActionsGraphQLSchema } from "./graphql/BulkActionsGraphQLSchema.js";
12
+ const HcmsBulkActionsFeature = createFeature({
13
+ name: "HcmsBulkActions",
14
+ register (container, config) {
15
+ container.registerInstance(EntriesBulkActionConfig, {
16
+ batchSize: config?.batchSize ?? 100
17
+ });
18
+ DeleteEntriesBulkActionFeature.register(container);
19
+ MoveToFolderBulkActionFeature.register(container);
20
+ MoveToTrashBulkActionFeature.register(container);
21
+ PublishEntriesBulkActionFeature.register(container);
22
+ UnpublishEntriesBulkActionFeature.register(container);
23
+ RestoreEntriesBulkActionFeature.register(container);
24
+ container.register(EmptyTrashBinTaskDefinition);
25
+ container.register(BulkActionListTaskDefinition);
26
+ container.register(BulkActionProcessTaskDefinition);
27
+ container.register(BulkActionsGraphQLSchema);
28
+ }
29
+ });
30
+ export { HcmsBulkActionsFeature };
31
+
32
+ //# sourceMappingURL=HcmsBulkActionsFeature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HcmsBulkActionsFeature.js","sources":["../src/HcmsBulkActionsFeature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { EntriesBulkActionConfig } from \"~/features/EntriesBulkAction/abstractions.js\";\nimport {\n BulkActionListTaskDefinition,\n BulkActionProcessTaskDefinition\n} from \"~/features/EntriesBulkAction/createBulkActionTasks.js\";\nimport { DeleteEntriesBulkActionFeature } from \"~/features/DeleteEntriesBulkAction/feature.js\";\nimport { MoveToFolderBulkActionFeature } from \"~/features/MoveToFolderBulkAction/feature.js\";\nimport { MoveToTrashBulkActionFeature } from \"~/features/MoveToTrashBulkAction/feature.js\";\nimport { PublishEntriesBulkActionFeature } from \"~/features/PublishEntriesBulkAction/feature.js\";\nimport { UnpublishEntriesBulkActionFeature } from \"~/features/UnpublishEntriesBulkAction/feature.js\";\nimport { RestoreEntriesBulkActionFeature } from \"~/features/RestoreEntriesBulkAction/feature.js\";\nimport { EmptyTrashBinTaskDefinition } from \"~/tasks/EmptyTrashBinTaskDefinition.js\";\nimport { BulkActionsGraphQLSchema } from \"~/graphql/BulkActionsGraphQLSchema.js\";\n\nexport interface HcmsBulkActionsFeatureConfig {\n batchSize?: number;\n}\n\nexport const HcmsBulkActionsFeature = createFeature<HcmsBulkActionsFeatureConfig | undefined>({\n name: \"HcmsBulkActions\",\n register(container, config) {\n container.registerInstance(EntriesBulkActionConfig, {\n batchSize: config?.batchSize ?? 100\n });\n\n DeleteEntriesBulkActionFeature.register(container);\n MoveToFolderBulkActionFeature.register(container);\n MoveToTrashBulkActionFeature.register(container);\n PublishEntriesBulkActionFeature.register(container);\n UnpublishEntriesBulkActionFeature.register(container);\n RestoreEntriesBulkActionFeature.register(container);\n\n container.register(EmptyTrashBinTaskDefinition);\n container.register(BulkActionListTaskDefinition);\n container.register(BulkActionProcessTaskDefinition);\n container.register(BulkActionsGraphQLSchema);\n }\n});\n"],"names":["HcmsBulkActionsFeature","createFeature","container","config","EntriesBulkActionConfig","DeleteEntriesBulkActionFeature","MoveToFolderBulkActionFeature","MoveToTrashBulkActionFeature","PublishEntriesBulkActionFeature","UnpublishEntriesBulkActionFeature","RestoreEntriesBulkActionFeature","EmptyTrashBinTaskDefinition","BulkActionListTaskDefinition","BulkActionProcessTaskDefinition","BulkActionsGraphQLSchema"],"mappings":";;;;;;;;;;;AAmBO,MAAMA,yBAAyBC,cAAwD;IAC1F,MAAM;IACN,UAASC,SAAS,EAAEC,MAAM;QACtBD,UAAU,gBAAgB,CAACE,yBAAyB;YAChD,WAAWD,QAAQ,aAAa;QACpC;QAEAE,+BAA+B,QAAQ,CAACH;QACxCI,8BAA8B,QAAQ,CAACJ;QACvCK,6BAA6B,QAAQ,CAACL;QACtCM,gCAAgC,QAAQ,CAACN;QACzCO,kCAAkC,QAAQ,CAACP;QAC3CQ,gCAAgC,QAAQ,CAACR;QAEzCA,UAAU,QAAQ,CAACS;QACnBT,UAAU,QAAQ,CAACU;QACnBV,UAAU,QAAQ,CAACW;QACnBX,UAAU,QAAQ,CAACY;IACvB;AACJ"}
@@ -0,0 +1 @@
1
+ export { EntriesBulkAction } from "../../../features/EntriesBulkAction/abstractions.js";
@@ -0,0 +1 @@
1
+ export { EntriesBulkAction } from "../../../features/EntriesBulkAction/abstractions.js";
@@ -10,6 +10,6 @@ declare class DeleteEntriesBulkActionImpl implements EntriesBulkAction.Interface
10
10
  processData(model: EntriesBulkAction.Model, params: EntriesBulkAction.ProcessParams): Promise<void>;
11
11
  }
12
12
  export declare const DeleteEntriesBulkAction: typeof DeleteEntriesBulkActionImpl & {
13
- __abstraction: import("@webiny/di").Abstraction<import("~/features/EntriesBulkAction/abstractions.js").IEntriesBulkAction>;
13
+ __abstraction: import("@webiny/di").Abstraction<import("~/features/EntriesBulkAction/abstractions.js").IEntriesBulkAction<Record<string, any>>>;
14
14
  };
15
15
  export {};
@@ -10,7 +10,6 @@ class DeleteEntriesBulkActionImpl {
10
10
  }
11
11
  async loadData(model, params) {
12
12
  const entriesResult = await this.listDeletedEntries.execute(model, params);
13
- if (entriesResult.isFail()) throw entriesResult.error;
14
13
  return entriesResult.value;
15
14
  }
16
15
  async processData(model, params) {
@@ -1 +1 @@
1
- {"version":3,"file":"features/DeleteEntriesBulkAction/DeleteEntriesBulkAction.js","sources":["../../../src/features/DeleteEntriesBulkAction/DeleteEntriesBulkAction.ts"],"sourcesContent":["import { ListDeletedEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries/index.js\";\nimport { DeleteEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/index.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { EntriesBulkAction } from \"~/features/EntriesBulkAction/abstractions.js\";\n\nclass DeleteEntriesBulkActionImpl implements EntriesBulkAction.Interface {\n readonly name = \"delete\";\n\n constructor(\n private listDeletedEntries: ListDeletedEntriesUseCase.Interface,\n private deleteEntry: DeleteEntryUseCase.Interface\n ) {}\n\n async loadData(\n model: EntriesBulkAction.Model,\n params: EntriesBulkAction.LoadDataParams\n ): Promise<EntriesBulkAction.LoadDataResult> {\n const entriesResult = await this.listDeletedEntries.execute(model, params);\n if (entriesResult.isFail()) {\n throw entriesResult.error;\n }\n\n return entriesResult.value;\n }\n\n async processData(\n model: EntriesBulkAction.Model,\n params: EntriesBulkAction.ProcessParams\n ): Promise<void> {\n const { id: entryId } = parseIdentifier(params.id);\n\n await this.deleteEntry.execute(model, entryId, {\n permanently: true\n });\n }\n}\n\nexport const DeleteEntriesBulkAction = EntriesBulkAction.createImplementation({\n implementation: DeleteEntriesBulkActionImpl,\n dependencies: [ListDeletedEntriesUseCase, DeleteEntryUseCase]\n});\n"],"names":["DeleteEntriesBulkActionImpl","listDeletedEntries","deleteEntry","model","params","entriesResult","entryId","parseIdentifier","DeleteEntriesBulkAction","EntriesBulkAction","ListDeletedEntriesUseCase","DeleteEntryUseCase"],"mappings":";;;;AAKA,MAAMA;IAGF,YACYC,kBAAuD,EACvDC,WAAyC,CACnD;aAFUD,kBAAkB,GAAlBA;aACAC,WAAW,GAAXA;aAJH,IAAI,GAAG;IAKb;IAEH,MAAM,SACFC,KAA8B,EAC9BC,MAAwC,EACC;QACzC,MAAMC,gBAAgB,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAACF,OAAOC;QACnE,IAAIC,cAAc,MAAM,IACpB,MAAMA,cAAc,KAAK;QAG7B,OAAOA,cAAc,KAAK;IAC9B;IAEA,MAAM,YACFF,KAA8B,EAC9BC,MAAuC,EAC1B;QACb,MAAM,EAAE,IAAIE,OAAO,EAAE,GAAGC,gBAAgBH,OAAO,EAAE;QAEjD,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAACD,OAAOG,SAAS;YAC3C,aAAa;QACjB;IACJ;AACJ;AAEO,MAAME,0BAA0BC,kBAAkB,oBAAoB,CAAC;IAC1E,gBAAgBT;IAChB,cAAc;QAACU;QAA2BC;KAAmB;AACjE"}
1
+ {"version":3,"file":"features/DeleteEntriesBulkAction/DeleteEntriesBulkAction.js","sources":["../../../src/features/DeleteEntriesBulkAction/DeleteEntriesBulkAction.ts"],"sourcesContent":["import { ListDeletedEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries/index.js\";\nimport { DeleteEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/index.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { EntriesBulkAction } from \"~/features/EntriesBulkAction/abstractions.js\";\n\nclass DeleteEntriesBulkActionImpl implements EntriesBulkAction.Interface {\n readonly name = \"delete\";\n\n constructor(\n private listDeletedEntries: ListDeletedEntriesUseCase.Interface,\n private deleteEntry: DeleteEntryUseCase.Interface\n ) {}\n\n async loadData(\n model: EntriesBulkAction.Model,\n params: EntriesBulkAction.LoadDataParams\n ): Promise<EntriesBulkAction.LoadDataResult> {\n const entriesResult = await this.listDeletedEntries.execute(model, params);\n\n return entriesResult.value;\n }\n\n async processData(\n model: EntriesBulkAction.Model,\n params: EntriesBulkAction.ProcessParams\n ): Promise<void> {\n const { id: entryId } = parseIdentifier(params.id);\n\n await this.deleteEntry.execute(model, entryId, {\n permanently: true\n });\n }\n}\n\nexport const DeleteEntriesBulkAction = EntriesBulkAction.createImplementation({\n implementation: DeleteEntriesBulkActionImpl,\n dependencies: [ListDeletedEntriesUseCase, DeleteEntryUseCase]\n});\n"],"names":["DeleteEntriesBulkActionImpl","listDeletedEntries","deleteEntry","model","params","entriesResult","entryId","parseIdentifier","DeleteEntriesBulkAction","EntriesBulkAction","ListDeletedEntriesUseCase","DeleteEntryUseCase"],"mappings":";;;;AAKA,MAAMA;IAGF,YACYC,kBAAuD,EACvDC,WAAyC,CACnD;aAFUD,kBAAkB,GAAlBA;aACAC,WAAW,GAAXA;aAJH,IAAI,GAAG;IAKb;IAEH,MAAM,SACFC,KAA8B,EAC9BC,MAAwC,EACC;QACzC,MAAMC,gBAAgB,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAACF,OAAOC;QAEnE,OAAOC,cAAc,KAAK;IAC9B;IAEA,MAAM,YACFF,KAA8B,EAC9BC,MAAuC,EAC1B;QACb,MAAM,EAAE,IAAIE,OAAO,EAAE,GAAGC,gBAAgBH,OAAO,EAAE;QAEjD,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAACD,OAAOG,SAAS;YAC3C,aAAa;QACjB;IACJ;AACJ;AAEO,MAAME,0BAA0BC,kBAAkB,oBAAoB,CAAC;IAC1E,gBAAgBT;IAChB,cAAc;QAACU;QAA2BC;KAAmB;AACjE"}
@@ -9,24 +9,24 @@ export interface IBulkActionListResult {
9
9
  entries: CmsEntry[];
10
10
  meta: CmsEntryMeta;
11
11
  }
12
- export interface IBulkActionProcessParams {
12
+ export interface IBulkActionProcessParams<TData = Record<string, any>> {
13
13
  id: string;
14
- data?: Record<string, any>;
14
+ data?: TData;
15
15
  }
16
- export interface IEntriesBulkAction {
16
+ export interface IEntriesBulkAction<TData = Record<string, any>> {
17
17
  readonly name: string;
18
18
  readonly modelIds?: string[];
19
19
  readonly batchSize?: number;
20
20
  loadData(model: CmsModel, params: IBulkActionListParams): Promise<IBulkActionListResult>;
21
- processData(model: CmsModel, params: IBulkActionProcessParams): Promise<void>;
21
+ processData(model: CmsModel, params: IBulkActionProcessParams<TData>): Promise<void>;
22
22
  }
23
- export declare const EntriesBulkAction: import("@webiny/di").Abstraction<IEntriesBulkAction>;
23
+ export declare const EntriesBulkAction: import("@webiny/di").Abstraction<IEntriesBulkAction<Record<string, any>>>;
24
24
  export declare namespace EntriesBulkAction {
25
- type Interface = IEntriesBulkAction;
25
+ type Interface<TData = Record<string, any>> = IEntriesBulkAction<TData>;
26
26
  type Model = CmsModel;
27
27
  type LoadDataParams = IBulkActionListParams;
28
28
  type LoadDataResult = IBulkActionListResult;
29
- type ProcessParams = IBulkActionProcessParams;
29
+ type ProcessParams<TData = Record<string, any>> = IBulkActionProcessParams<TData>;
30
30
  }
31
31
  interface IEntriesBulkActionConfig {
32
32
  batchSize: number;
@@ -1 +1 @@
1
- {"version":3,"file":"features/EntriesBulkAction/abstractions.js","sources":["../../../src/features/EntriesBulkAction/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsEntry, CmsEntryMeta, CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport interface IBulkActionListParams {\n where?: Record<string, any>;\n search?: string;\n after?: string | null;\n limit?: number;\n}\n\nexport interface IBulkActionListResult {\n entries: CmsEntry[];\n meta: CmsEntryMeta;\n}\n\nexport interface IBulkActionProcessParams {\n id: string;\n data?: Record<string, any>;\n}\n\nexport interface IEntriesBulkAction {\n readonly name: string;\n readonly modelIds?: string[]; // Optional: filter which models get GraphQL mutations\n readonly batchSize?: number;\n loadData(model: CmsModel, params: IBulkActionListParams): Promise<IBulkActionListResult>;\n processData(model: CmsModel, params: IBulkActionProcessParams): Promise<void>;\n}\n\nexport const EntriesBulkAction = createAbstraction<IEntriesBulkAction>(\"EntriesBulkAction\");\n\nexport namespace EntriesBulkAction {\n export type Interface = IEntriesBulkAction;\n export type Model = CmsModel;\n export type LoadDataParams = IBulkActionListParams;\n export type LoadDataResult = IBulkActionListResult;\n export type ProcessParams = IBulkActionProcessParams;\n}\n\ninterface IEntriesBulkActionConfig {\n batchSize: number;\n}\n\nexport const EntriesBulkActionConfig =\n createAbstraction<IEntriesBulkActionConfig>(\"EntriesBulkActionConfig\");\n\nexport namespace EntriesBulkActionConfig {\n export type Interface = IEntriesBulkActionConfig;\n}\n"],"names":["EntriesBulkAction","createAbstraction","EntriesBulkActionConfig"],"mappings":";AA4BO,MAAMA,oBAAoBC,kBAAsC;AAchE,MAAMC,0BACTD,kBAA4C"}
1
+ {"version":3,"file":"features/EntriesBulkAction/abstractions.js","sources":["../../../src/features/EntriesBulkAction/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsEntry, CmsEntryMeta, CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport interface IBulkActionListParams {\n where?: Record<string, any>;\n search?: string;\n after?: string | null;\n limit?: number;\n}\n\nexport interface IBulkActionListResult {\n entries: CmsEntry[];\n meta: CmsEntryMeta;\n}\n\nexport interface IBulkActionProcessParams<TData = Record<string, any>> {\n id: string;\n // The `data` payload the Admin action sent along with the trigger. Type it by\n // parameterizing `EntriesBulkAction.Interface<TData>` on your implementation.\n data?: TData;\n}\n\nexport interface IEntriesBulkAction<TData = Record<string, any>> {\n readonly name: string;\n readonly modelIds?: string[]; // Optional: filter which models get GraphQL mutations\n readonly batchSize?: number;\n loadData(model: CmsModel, params: IBulkActionListParams): Promise<IBulkActionListResult>;\n processData(model: CmsModel, params: IBulkActionProcessParams<TData>): Promise<void>;\n}\n\nexport const EntriesBulkAction = createAbstraction<IEntriesBulkAction>(\"EntriesBulkAction\");\n\nexport namespace EntriesBulkAction {\n export type Interface<TData = Record<string, any>> = IEntriesBulkAction<TData>;\n export type Model = CmsModel;\n export type LoadDataParams = IBulkActionListParams;\n export type LoadDataResult = IBulkActionListResult;\n export type ProcessParams<TData = Record<string, any>> = IBulkActionProcessParams<TData>;\n}\n\ninterface IEntriesBulkActionConfig {\n batchSize: number;\n}\n\nexport const EntriesBulkActionConfig =\n createAbstraction<IEntriesBulkActionConfig>(\"EntriesBulkActionConfig\");\n\nexport namespace EntriesBulkActionConfig {\n export type Interface = IEntriesBulkActionConfig;\n}\n"],"names":["EntriesBulkAction","createAbstraction","EntriesBulkActionConfig"],"mappings":";AA8BO,MAAMA,oBAAoBC,kBAAsC;AAchE,MAAMC,0BACTD,kBAA4C"}
@@ -1,5 +1,48 @@
1
- import { EntriesBulkAction, EntriesBulkActionConfig } from "./abstractions.js";
2
- export declare const createBulkActionTasks: (bulkAction: EntriesBulkAction.Interface, bulkActionsConfig: EntriesBulkActionConfig.Interface) => {
3
- name: string;
4
- register(container: import("@webiny/di").Container): void;
1
+ import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
3
+ import { ListTasksUseCase, TriggerTaskUseCase, TasksCrud } from "@webiny/background-tasks/api";
4
+ import type { IBulkActionOperationByModelInput, IBulkActionOperationByModelOutput, IBulkActionOperationInput, IBulkActionOperationOutput } from "../../types.js";
5
+ import { EntriesBulkActionConfig } from "./abstractions.js";
6
+ import type { Container } from "@webiny/di";
7
+ export declare const BULK_ACTION_LIST_TASK_ID = "hcmsBulkListEntries";
8
+ export declare const BULK_ACTION_PROCESS_TASK_ID = "hcmsBulkProcessEntries";
9
+ declare class BulkActionListTask implements TaskDefinition.Interface<IBulkActionOperationByModelInput, IBulkActionOperationByModelOutput> {
10
+ private readonly container;
11
+ private readonly getModel;
12
+ private readonly listTasks;
13
+ private readonly triggerTask;
14
+ private readonly tasksCrud;
15
+ private readonly bulkActionsConfig;
16
+ readonly id = "hcmsBulkListEntries";
17
+ readonly title = "Headless CMS: list entries for bulk action";
18
+ readonly maxIterations = 500;
19
+ readonly databaseLogs = false;
20
+ readonly isPrivate = true;
21
+ readonly selfCleanup: ("onAbort" | "onSuccess")[];
22
+ constructor(container: Container, getModel: GetModelUseCase.Interface, listTasks: ListTasksUseCase.Interface, triggerTask: TriggerTaskUseCase.Interface, tasksCrud: TasksCrud.Interface, bulkActionsConfig: EntriesBulkActionConfig.Interface);
23
+ run({ input, controller, definition }: TaskDefinition.RunParams<IBulkActionOperationByModelInput, IBulkActionOperationByModelOutput>): Promise<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskResultAborted | import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskResultError | TaskDefinition.ResultContinue<IBulkActionOperationByModelInput> | TaskDefinition.ResultDone<IBulkActionOperationByModelOutput>>;
24
+ onDone({ task }: TaskDefinition.LifecycleHookParams): Promise<void>;
25
+ onError({ task }: TaskDefinition.LifecycleHookParams): Promise<void>;
26
+ onAbort({ task }: TaskDefinition.LifecycleHookParams): Promise<void>;
27
+ onMaxIterations({ task }: TaskDefinition.LifecycleHookParams): Promise<void>;
28
+ cleanup(task: TaskDefinition.Task): Promise<void>;
29
+ }
30
+ declare class BulkActionProcessTask implements TaskDefinition.Interface<IBulkActionOperationInput, IBulkActionOperationOutput> {
31
+ private readonly container;
32
+ private readonly getModel;
33
+ readonly id = "hcmsBulkProcessEntries";
34
+ readonly title = "Headless CMS: process entries for bulk action";
35
+ readonly maxIterations = 2;
36
+ readonly databaseLogs = false;
37
+ readonly isPrivate = true;
38
+ readonly selfCleanup: ("onAbort" | "onSuccess")[];
39
+ constructor(container: Container, getModel: GetModelUseCase.Interface);
40
+ run({ input, controller, definition }: TaskDefinition.RunParams<IBulkActionOperationInput, IBulkActionOperationOutput>): Promise<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskResultAborted | import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskResultError | TaskDefinition.ResultContinue<IBulkActionOperationInput> | TaskDefinition.ResultDone<IBulkActionOperationOutput>>;
41
+ }
42
+ export declare const BulkActionListTaskDefinition: typeof BulkActionListTask & {
43
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskDefinition<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskOutput>>;
5
44
  };
45
+ export declare const BulkActionProcessTaskDefinition: typeof BulkActionProcessTask & {
46
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskDefinition<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskOutput>>;
47
+ };
48
+ export {};
@@ -1,132 +1,147 @@
1
- import { createFeature } from "@webiny/feature/api";
2
1
  import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
3
2
  import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
4
- import { BulkActionContext } from "../BulkActionContext/index.js";
3
+ import { ListTasksUseCase, TasksCrud, TriggerTaskUseCase } from "@webiny/background-tasks/api";
4
+ import { BulkActionOperationByModelAction } from "../../types.js";
5
+ import { EntriesBulkAction, EntriesBulkActionConfig } from "./abstractions.js";
5
6
  import { BulkActionName } from "../../domain/BulkActionName.js";
6
7
  import { ChildTasksCleanup } from "./internals/ChildTasksCleanup.js";
7
8
  import { ProcessTask } from "./internals/ProcessTask.js";
8
9
  import { CreateTasksByModel } from "./internals/CreateTasksByModel.js";
9
10
  import { ProcessTasksByModel } from "./internals/ProcessTasksByModel.js";
10
- const createBulkActionTasks = (bulkAction, bulkActionsConfig)=>{
11
- const bulkActionName = BulkActionName.from(bulkAction.name);
12
- const batchSize = bulkAction.batchSize ?? bulkActionsConfig.batchSize ?? 100;
13
- const listTaskId = `hcmsBulkList${bulkActionName}Entries`;
14
- const processTaskId = `hcmsBulkProcess${bulkActionName}Entries`;
15
- class BulkActionListTask {
16
- constructor(context, getModel){
17
- this.id = listTaskId;
18
- this.title = `Headless CMS: list "${bulkActionName}" entries by model`;
19
- this.maxIterations = 500;
20
- this.databaseLogs = false;
21
- this.isPrivate = true;
22
- this.selfCleanup = [
23
- "onSuccess",
24
- "onAbort"
25
- ];
26
- this.context = context;
27
- this.getModel = getModel;
28
- }
29
- async run({ input, controller }) {
30
- try {
31
- if (!input.modelId) return controller.response.error('Missing "modelId" in the input.');
32
- const action = input.action ?? "CREATE_SUBTASKS";
33
- switch(action){
34
- case "PROCESS_SUBTASKS":
35
- {
36
- const processTasks = new ProcessTasksByModel(this.context, processTaskId);
37
- return await processTasks.execute({
38
- input,
39
- controller
40
- });
41
- }
42
- case "CREATE_SUBTASKS":
43
- case "CHECK_MORE_SUBTASKS":
44
- {
45
- const createTasks = new CreateTasksByModel(this.context, this.getModel, bulkAction, processTaskId, batchSize);
46
- return await createTasks.execute({
47
- input,
48
- controller
49
- });
50
- }
51
- case "END_TASK":
52
- return controller.response.done(`Task done: task "${processTaskId}" has been successfully processed for entries from "${input.modelId}" model.`);
53
- default:
54
- return controller.response.error(`Unknown action: ${action}`);
55
- }
56
- } catch (ex) {
57
- return controller.response.error(ex.message ?? "Error while executing list task");
58
- }
59
- }
60
- async onDone({ task }) {
61
- await this.cleanup(task);
62
- }
63
- async onError({ task }) {
64
- await this.cleanup(task);
65
- }
66
- async onAbort({ task }) {
67
- await this.cleanup(task);
68
- }
69
- async onMaxIterations({ task }) {
70
- await this.cleanup(task);
71
- }
72
- async cleanup(task) {
73
- const childTasksCleanup = new ChildTasksCleanup();
74
- try {
75
- await childTasksCleanup.execute({
76
- context: this.context,
77
- task
78
- });
79
- } catch (ex) {
80
- console.error(`Error while cleaning "${listTaskId}" child tasks.`, ex);
11
+ import { RequestContainer } from "@webiny/event-handler-core";
12
+ const BULK_ACTION_LIST_TASK_ID = "hcmsBulkListEntries";
13
+ const BULK_ACTION_PROCESS_TASK_ID = "hcmsBulkProcessEntries";
14
+ const resolveBulkAction = (container, actionName)=>{
15
+ const bulkActions = container.resolveAll(EntriesBulkAction);
16
+ const action = bulkActions.find((a)=>BulkActionName.from(a.name) === actionName);
17
+ if (!action) throw new Error(`Unknown bulk action: "${actionName}"`);
18
+ return action;
19
+ };
20
+ class BulkActionListTask {
21
+ constructor(container, getModel, listTasks, triggerTask, tasksCrud, bulkActionsConfig){
22
+ this.container = container;
23
+ this.getModel = getModel;
24
+ this.listTasks = listTasks;
25
+ this.triggerTask = triggerTask;
26
+ this.tasksCrud = tasksCrud;
27
+ this.bulkActionsConfig = bulkActionsConfig;
28
+ this.id = BULK_ACTION_LIST_TASK_ID;
29
+ this.title = "Headless CMS: list entries for bulk action";
30
+ this.maxIterations = 500;
31
+ this.databaseLogs = false;
32
+ this.isPrivate = true;
33
+ this.selfCleanup = [
34
+ "onSuccess",
35
+ "onAbort"
36
+ ];
37
+ }
38
+ async run({ input, controller, definition }) {
39
+ try {
40
+ if (!input.modelId) return controller.response.error('Missing "modelId" in the input.');
41
+ if (!input.actionName) return controller.response.error('Missing "actionName" in the input.');
42
+ const bulkAction = resolveBulkAction(this.container, input.actionName);
43
+ const batchSize = bulkAction.batchSize ?? this.bulkActionsConfig.batchSize ?? 100;
44
+ const action = input.action ?? BulkActionOperationByModelAction.CREATE_SUBTASKS;
45
+ switch(action){
46
+ case BulkActionOperationByModelAction.PROCESS_SUBTASKS:
47
+ {
48
+ const processTasks = new ProcessTasksByModel(this.listTasks, BULK_ACTION_PROCESS_TASK_ID);
49
+ return await processTasks.execute({
50
+ input,
51
+ controller,
52
+ definition
53
+ });
54
+ }
55
+ case BulkActionOperationByModelAction.CREATE_SUBTASKS:
56
+ case BulkActionOperationByModelAction.CHECK_MORE_SUBTASKS:
57
+ {
58
+ const createTasks = new CreateTasksByModel(this.getModel, this.triggerTask, bulkAction, BULK_ACTION_PROCESS_TASK_ID, batchSize);
59
+ return await createTasks.execute({
60
+ input,
61
+ controller,
62
+ definition
63
+ });
64
+ }
65
+ case BulkActionOperationByModelAction.END_TASK:
66
+ return controller.response.done(`Task done: bulk action "${input.actionName}" has been successfully processed for entries from "${input.modelId}" model.`);
67
+ default:
68
+ return controller.response.error(`Unknown action: ${action}`);
81
69
  }
70
+ } catch (ex) {
71
+ return controller.response.error(ex.message ?? "Error while executing bulk action list task");
82
72
  }
83
73
  }
84
- class BulkActionProcessTask {
85
- constructor(getModel){
86
- this.id = processTaskId;
87
- this.title = `Headless CMS: process "${bulkActionName}" entries`;
88
- this.maxIterations = 2;
89
- this.databaseLogs = false;
90
- this.isPrivate = true;
91
- this.selfCleanup = [
92
- "onSuccess",
93
- "onAbort"
94
- ];
95
- this.getModel = getModel;
96
- }
97
- async run({ input, controller }) {
98
- try {
99
- const processTask = new ProcessTask(bulkAction, this.getModel);
100
- return await processTask.execute({
101
- input,
102
- controller
103
- });
104
- } catch (ex) {
105
- return controller.response.error(ex.message ?? "Error while executing process task");
106
- }
74
+ async onDone({ task }) {
75
+ await this.cleanup(task);
76
+ }
77
+ async onError({ task }) {
78
+ await this.cleanup(task);
79
+ }
80
+ async onAbort({ task }) {
81
+ await this.cleanup(task);
82
+ }
83
+ async onMaxIterations({ task }) {
84
+ await this.cleanup(task);
85
+ }
86
+ async cleanup(task) {
87
+ const childTasksCleanup = new ChildTasksCleanup();
88
+ try {
89
+ await childTasksCleanup.execute({
90
+ tasksCrud: this.tasksCrud,
91
+ task
92
+ });
93
+ } catch (ex) {
94
+ console.error("Error while cleaning bulk action list child tasks.", ex);
107
95
  }
108
96
  }
109
- const BulkListTask = TaskDefinition.createImplementation({
110
- implementation: BulkActionListTask,
111
- dependencies: [
112
- BulkActionContext,
113
- GetModelUseCase
114
- ]
115
- });
116
- const BulkProcessTask = TaskDefinition.createImplementation({
117
- implementation: BulkActionProcessTask,
118
- dependencies: [
119
- GetModelUseCase
120
- ]
121
- });
122
- return createFeature({
123
- name: `HeadlessCms/BulkActionTasks/${bulkActionName}`,
124
- register (container) {
125
- container.register(BulkListTask);
126
- container.register(BulkProcessTask);
97
+ }
98
+ class BulkActionProcessTask {
99
+ constructor(container, getModel){
100
+ this.container = container;
101
+ this.getModel = getModel;
102
+ this.id = BULK_ACTION_PROCESS_TASK_ID;
103
+ this.title = "Headless CMS: process entries for bulk action";
104
+ this.maxIterations = 2;
105
+ this.databaseLogs = false;
106
+ this.isPrivate = true;
107
+ this.selfCleanup = [
108
+ "onSuccess",
109
+ "onAbort"
110
+ ];
111
+ }
112
+ async run({ input, controller, definition }) {
113
+ try {
114
+ if (!input.actionName) return controller.response.error('Missing "actionName" in the input.');
115
+ const bulkAction = resolveBulkAction(this.container, input.actionName);
116
+ const processTask = new ProcessTask(bulkAction, this.getModel);
117
+ return await processTask.execute({
118
+ input,
119
+ controller,
120
+ definition
121
+ });
122
+ } catch (ex) {
123
+ return controller.response.error(ex.message ?? "Error while executing bulk action process task");
127
124
  }
128
- });
129
- };
130
- export { createBulkActionTasks };
125
+ }
126
+ }
127
+ const BulkActionListTaskDefinition = TaskDefinition.createImplementation({
128
+ implementation: BulkActionListTask,
129
+ dependencies: [
130
+ RequestContainer,
131
+ GetModelUseCase,
132
+ ListTasksUseCase,
133
+ TriggerTaskUseCase,
134
+ TasksCrud,
135
+ EntriesBulkActionConfig
136
+ ]
137
+ });
138
+ const BulkActionProcessTaskDefinition = TaskDefinition.createImplementation({
139
+ implementation: BulkActionProcessTask,
140
+ dependencies: [
141
+ RequestContainer,
142
+ GetModelUseCase
143
+ ]
144
+ });
145
+ export { BULK_ACTION_LIST_TASK_ID, BULK_ACTION_PROCESS_TASK_ID, BulkActionListTaskDefinition, BulkActionProcessTaskDefinition };
131
146
 
132
147
  //# sourceMappingURL=createBulkActionTasks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"features/EntriesBulkAction/createBulkActionTasks.js","sources":["../../../src/features/EntriesBulkAction/createBulkActionTasks.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { BulkActionContext } from \"~/features/BulkActionContext/index.js\";\nimport type {\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput,\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n} from \"~/types.js\";\nimport { EntriesBulkAction, EntriesBulkActionConfig } from \"./abstractions.js\";\nimport { BulkActionName } from \"~/domain/BulkActionName.js\";\nimport { ChildTasksCleanup } from \"./internals/ChildTasksCleanup.js\";\nimport { ProcessTask } from \"./internals/ProcessTask.js\";\nimport { CreateTasksByModel } from \"./internals/CreateTasksByModel.js\";\nimport { ProcessTasksByModel } from \"./internals/ProcessTasksByModel.js\";\n\nenum BulkActionOperationByModelAction {\n CREATE_SUBTASKS = \"CREATE_SUBTASKS\",\n CHECK_MORE_SUBTASKS = \"CHECK_MORE_SUBTASKS\",\n PROCESS_SUBTASKS = \"PROCESS_SUBTASKS\",\n END_TASK = \"END_TASK\"\n}\n\nexport const createBulkActionTasks = (\n bulkAction: EntriesBulkAction.Interface,\n bulkActionsConfig: EntriesBulkActionConfig.Interface\n) => {\n const bulkActionName = BulkActionName.from(bulkAction.name);\n const batchSize = bulkAction.batchSize ?? bulkActionsConfig.batchSize ?? 100;\n const listTaskId = `hcmsBulkList${bulkActionName}Entries`;\n const processTaskId = `hcmsBulkProcess${bulkActionName}Entries`;\n\n // List Task - manages pagination and creates subtasks\n class BulkActionListTask implements TaskDefinition.Interface<\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput\n > {\n public readonly id = listTaskId;\n public readonly title = `Headless CMS: list \"${bulkActionName}\" entries by model`;\n public readonly maxIterations = 500;\n public readonly databaseLogs = false;\n public readonly isPrivate = true;\n public readonly context: BulkActionContext.Interface;\n public readonly getModel: GetModelUseCase.Interface;\n\n public readonly selfCleanup = [\"onSuccess\" as const, \"onAbort\" as const];\n\n constructor(context: BulkActionContext.Interface, getModel: GetModelUseCase.Interface) {\n this.context = context;\n this.getModel = getModel;\n }\n\n async run({\n input,\n controller\n }: TaskDefinition.RunParams<\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput\n >) {\n try {\n if (!input.modelId) {\n return controller.response.error(`Missing \"modelId\" in the input.`);\n }\n\n const action = input.action ?? BulkActionOperationByModelAction.CREATE_SUBTASKS;\n\n switch (action) {\n case BulkActionOperationByModelAction.PROCESS_SUBTASKS: {\n const processTasks = new ProcessTasksByModel(this.context, processTaskId);\n return await processTasks.execute({ input, controller });\n }\n case BulkActionOperationByModelAction.CREATE_SUBTASKS:\n case BulkActionOperationByModelAction.CHECK_MORE_SUBTASKS: {\n const createTasks = new CreateTasksByModel(\n this.context,\n this.getModel,\n bulkAction,\n processTaskId,\n batchSize\n );\n return await createTasks.execute({ input, controller });\n }\n case BulkActionOperationByModelAction.END_TASK: {\n return controller.response.done(\n `Task done: task \"${processTaskId}\" has been successfully processed for entries from \"${\n input.modelId\n }\" model.`\n );\n }\n default:\n return controller.response.error(`Unknown action: ${action}`);\n }\n } catch (ex) {\n return controller.response.error(ex.message ?? \"Error while executing list task\");\n }\n }\n\n async onDone({ task }: TaskDefinition.LifecycleHookParams): Promise<void> {\n await this.cleanup(task);\n }\n\n async onError({ task }: TaskDefinition.LifecycleHookParams) {\n await this.cleanup(task);\n }\n\n async onAbort({ task }: TaskDefinition.LifecycleHookParams) {\n await this.cleanup(task);\n }\n\n async onMaxIterations({ task }: TaskDefinition.LifecycleHookParams) {\n await this.cleanup(task);\n }\n\n async cleanup(task: TaskDefinition.Task) {\n const childTasksCleanup = new ChildTasksCleanup();\n try {\n await childTasksCleanup.execute({ context: this.context, task });\n } catch (ex) {\n console.error(`Error while cleaning \"${listTaskId}\" child tasks.`, ex);\n }\n }\n }\n\n // Process Task - processes individual batches of entries\n class BulkActionProcessTask implements TaskDefinition.Interface<\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n > {\n public readonly id = processTaskId;\n public readonly title = `Headless CMS: process \"${bulkActionName}\" entries`;\n public readonly maxIterations = 2;\n public readonly databaseLogs = false;\n public readonly isPrivate = true;\n public readonly getModel: GetModelUseCase.Interface;\n\n public readonly selfCleanup = [\"onSuccess\" as const, \"onAbort\" as const];\n\n constructor(getModel: GetModelUseCase.Interface) {\n this.getModel = getModel;\n }\n\n async run({\n input,\n controller\n }: TaskDefinition.RunParams<IBulkActionOperationInput, IBulkActionOperationOutput>) {\n try {\n const processTask = new ProcessTask(bulkAction, this.getModel);\n return await processTask.execute({ input, controller });\n } catch (ex) {\n return controller.response.error(\n ex.message ?? \"Error while executing process task\"\n );\n }\n }\n }\n\n const BulkListTask = TaskDefinition.createImplementation({\n implementation: BulkActionListTask,\n dependencies: [BulkActionContext, GetModelUseCase]\n });\n\n const BulkProcessTask = TaskDefinition.createImplementation({\n implementation: BulkActionProcessTask,\n dependencies: [GetModelUseCase]\n });\n\n return createFeature({\n name: `HeadlessCms/BulkActionTasks/${bulkActionName}`,\n register(container) {\n container.register(BulkListTask);\n container.register(BulkProcessTask);\n }\n });\n};\n"],"names":["createBulkActionTasks","bulkAction","bulkActionsConfig","bulkActionName","BulkActionName","batchSize","listTaskId","processTaskId","BulkActionListTask","context","getModel","input","controller","action","processTasks","ProcessTasksByModel","createTasks","CreateTasksByModel","ex","task","childTasksCleanup","ChildTasksCleanup","console","BulkActionProcessTask","processTask","ProcessTask","BulkListTask","TaskDefinition","BulkActionContext","GetModelUseCase","BulkProcessTask","createFeature","container"],"mappings":"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"}
1
+ {"version":3,"file":"features/EntriesBulkAction/createBulkActionTasks.js","sources":["../../../src/features/EntriesBulkAction/createBulkActionTasks.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { ListTasksUseCase, TriggerTaskUseCase, TasksCrud } from \"@webiny/background-tasks/api\";\nimport type {\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput,\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n} from \"~/types.js\";\nimport { BulkActionOperationByModelAction } from \"~/types.js\";\nimport { EntriesBulkAction, EntriesBulkActionConfig } from \"./abstractions.js\";\nimport { BulkActionName } from \"~/domain/BulkActionName.js\";\nimport { ChildTasksCleanup } from \"./internals/ChildTasksCleanup.js\";\nimport { ProcessTask } from \"./internals/ProcessTask.js\";\nimport { CreateTasksByModel } from \"./internals/CreateTasksByModel.js\";\nimport { ProcessTasksByModel } from \"./internals/ProcessTasksByModel.js\";\nimport type { Container } from \"@webiny/di\";\n\nexport const BULK_ACTION_LIST_TASK_ID = \"hcmsBulkListEntries\";\nexport const BULK_ACTION_PROCESS_TASK_ID = \"hcmsBulkProcessEntries\";\n\nconst resolveBulkAction = (container: Container, actionName: string) => {\n const bulkActions = container.resolveAll(EntriesBulkAction);\n const action = bulkActions.find(a => BulkActionName.from(a.name) === actionName);\n if (!action) {\n throw new Error(`Unknown bulk action: \"${actionName}\"`);\n }\n return action;\n};\n\nclass BulkActionListTask implements TaskDefinition.Interface<\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput\n> {\n public readonly id = BULK_ACTION_LIST_TASK_ID;\n public readonly title = \"Headless CMS: list entries for bulk action\";\n public readonly maxIterations = 500;\n public readonly databaseLogs = false;\n public readonly isPrivate = true;\n public readonly selfCleanup = [\"onSuccess\" as const, \"onAbort\" as const];\n\n constructor(\n private readonly container: Container,\n private readonly getModel: GetModelUseCase.Interface,\n private readonly listTasks: ListTasksUseCase.Interface,\n private readonly triggerTask: TriggerTaskUseCase.Interface,\n private readonly tasksCrud: TasksCrud.Interface,\n private readonly bulkActionsConfig: EntriesBulkActionConfig.Interface\n ) {}\n\n async run({\n input,\n controller,\n definition\n }: TaskDefinition.RunParams<\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput\n >) {\n try {\n if (!input.modelId) {\n return controller.response.error(`Missing \"modelId\" in the input.`);\n }\n if (!input.actionName) {\n return controller.response.error(`Missing \"actionName\" in the input.`);\n }\n\n const bulkAction = resolveBulkAction(this.container, input.actionName);\n const batchSize = bulkAction.batchSize ?? this.bulkActionsConfig.batchSize ?? 100;\n const action = input.action ?? BulkActionOperationByModelAction.CREATE_SUBTASKS;\n\n switch (action) {\n case BulkActionOperationByModelAction.PROCESS_SUBTASKS: {\n const processTasks = new ProcessTasksByModel(\n this.listTasks,\n BULK_ACTION_PROCESS_TASK_ID\n );\n return await processTasks.execute({ input, controller, definition });\n }\n case BulkActionOperationByModelAction.CREATE_SUBTASKS:\n case BulkActionOperationByModelAction.CHECK_MORE_SUBTASKS: {\n const createTasks = new CreateTasksByModel(\n this.getModel,\n this.triggerTask,\n bulkAction,\n BULK_ACTION_PROCESS_TASK_ID,\n batchSize\n );\n return await createTasks.execute({ input, controller, definition });\n }\n case BulkActionOperationByModelAction.END_TASK: {\n return controller.response.done(\n `Task done: bulk action \"${input.actionName}\" has been successfully processed for entries from \"${input.modelId}\" model.`\n );\n }\n default:\n return controller.response.error(`Unknown action: ${action}`);\n }\n } catch (ex) {\n return controller.response.error(\n ex.message ?? \"Error while executing bulk action list task\"\n );\n }\n }\n\n async onDone({ task }: TaskDefinition.LifecycleHookParams): Promise<void> {\n await this.cleanup(task);\n }\n\n async onError({ task }: TaskDefinition.LifecycleHookParams) {\n await this.cleanup(task);\n }\n\n async onAbort({ task }: TaskDefinition.LifecycleHookParams) {\n await this.cleanup(task);\n }\n\n async onMaxIterations({ task }: TaskDefinition.LifecycleHookParams) {\n await this.cleanup(task);\n }\n\n async cleanup(task: TaskDefinition.Task) {\n const childTasksCleanup = new ChildTasksCleanup();\n try {\n await childTasksCleanup.execute({ tasksCrud: this.tasksCrud, task });\n } catch (ex) {\n console.error(`Error while cleaning bulk action list child tasks.`, ex);\n }\n }\n}\n\nclass BulkActionProcessTask implements TaskDefinition.Interface<\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n> {\n public readonly id = BULK_ACTION_PROCESS_TASK_ID;\n public readonly title = \"Headless CMS: process entries for bulk action\";\n public readonly maxIterations = 2;\n public readonly databaseLogs = false;\n public readonly isPrivate = true;\n public readonly selfCleanup = [\"onSuccess\" as const, \"onAbort\" as const];\n\n constructor(\n private readonly container: Container,\n private readonly getModel: GetModelUseCase.Interface\n ) {}\n\n async run({\n input,\n controller,\n definition\n }: TaskDefinition.RunParams<IBulkActionOperationInput, IBulkActionOperationOutput>) {\n try {\n if (!input.actionName) {\n return controller.response.error(`Missing \"actionName\" in the input.`);\n }\n\n const bulkAction = resolveBulkAction(this.container, input.actionName);\n const processTask = new ProcessTask(bulkAction, this.getModel);\n return await processTask.execute({ input, controller, definition });\n } catch (ex) {\n return controller.response.error(\n ex.message ?? \"Error while executing bulk action process task\"\n );\n }\n }\n}\n\nimport { RequestContainer } from \"@webiny/event-handler-core\";\n\nexport const BulkActionListTaskDefinition = TaskDefinition.createImplementation({\n implementation: BulkActionListTask,\n dependencies: [\n RequestContainer,\n GetModelUseCase,\n ListTasksUseCase,\n TriggerTaskUseCase,\n TasksCrud,\n EntriesBulkActionConfig\n ]\n});\n\nexport const BulkActionProcessTaskDefinition = TaskDefinition.createImplementation({\n implementation: BulkActionProcessTask,\n dependencies: [RequestContainer, GetModelUseCase]\n});\n"],"names":["BULK_ACTION_LIST_TASK_ID","BULK_ACTION_PROCESS_TASK_ID","resolveBulkAction","container","actionName","bulkActions","EntriesBulkAction","action","a","BulkActionName","Error","BulkActionListTask","getModel","listTasks","triggerTask","tasksCrud","bulkActionsConfig","input","controller","definition","bulkAction","batchSize","BulkActionOperationByModelAction","processTasks","ProcessTasksByModel","createTasks","CreateTasksByModel","ex","task","childTasksCleanup","ChildTasksCleanup","console","BulkActionProcessTask","processTask","ProcessTask","BulkActionListTaskDefinition","TaskDefinition","RequestContainer","GetModelUseCase","ListTasksUseCase","TriggerTaskUseCase","TasksCrud","EntriesBulkActionConfig","BulkActionProcessTaskDefinition"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import type { ITask, Context } from "@webiny/background-tasks/api";
1
+ import type { ITask, TasksCrud } from "@webiny/background-tasks/api";
2
2
  import type { IUseCase } from "../../../abstractions/index.js";
3
3
  export interface IChildTasksCleanupExecuteParams {
4
- context: Context;
4
+ tasksCrud: TasksCrud.Interface;
5
5
  task: ITask;
6
6
  }
7
7
  /**
@@ -1,8 +1,8 @@
1
1
  import { TaskLogItemType } from "@webiny/background-tasks/api";
2
2
  class ChildTasksCleanup {
3
3
  async execute(params) {
4
- const { context, task } = params;
5
- const { items: childTasks } = await context.tasks.listTasks({
4
+ const { tasksCrud, task } = params;
5
+ const { items: childTasks } = await tasksCrud.listTasks({
6
6
  where: {
7
7
  parentId: task.id
8
8
  },
@@ -10,22 +10,22 @@ class ChildTasksCleanup {
10
10
  });
11
11
  if (0 === childTasks.length) return;
12
12
  const childTaskIdList = childTasks.map((childTask)=>childTask.id);
13
- const { items: childLogs } = await context.tasks.listLogs({
13
+ const { items: childLogs } = await tasksCrud.listLogs({
14
14
  where: {
15
15
  task_in: childTaskIdList
16
16
  },
17
17
  limit: 10000
18
18
  });
19
- if (0 === childLogs.length) await this.deleteTasks(context, childTaskIdList);
19
+ if (0 === childLogs.length) await this.deleteTasks(tasksCrud, childTaskIdList);
20
20
  const deletedChildTaskLogIdList = [];
21
21
  for (const log of childLogs)if (!log.items.some((item)=>item.type === TaskLogItemType.ERROR)) {
22
- await context.tasks.deleteLog(log.id);
22
+ await tasksCrud.deleteLog(log.id);
23
23
  if (!deletedChildTaskLogIdList.includes(log.task)) deletedChildTaskLogIdList.push(log.task);
24
24
  }
25
- await this.deleteTasks(context, deletedChildTaskLogIdList);
25
+ await this.deleteTasks(tasksCrud, deletedChildTaskLogIdList);
26
26
  }
27
- async deleteTasks(context, taskIds) {
28
- for (const taskId of taskIds)await context.tasks.deleteTask(taskId);
27
+ async deleteTasks(tasksCrud, taskIds) {
28
+ for (const taskId of taskIds)await tasksCrud.deleteTask(taskId);
29
29
  }
30
30
  }
31
31
  export { ChildTasksCleanup };
@@ -1 +1 @@
1
- {"version":3,"file":"features/EntriesBulkAction/internals/ChildTasksCleanup.js","sources":["../../../../src/features/EntriesBulkAction/internals/ChildTasksCleanup.ts"],"sourcesContent":["import type { ITask, Context } from \"@webiny/background-tasks/api\";\nimport { TaskLogItemType } from \"@webiny/background-tasks/api\";\nimport type { IUseCase } from \"~/abstractions/index.js\";\nimport type { HcmsBulkActionsContext } from \"~/types.js\";\n\nexport interface IChildTasksCleanupExecuteParams {\n context: Context;\n task: ITask;\n}\n\n/**\n * Cleanup of the child tasks.\n * This code will remove all the child tasks and their logs, which have no errors in them.\n */\nexport class ChildTasksCleanup implements IUseCase<IChildTasksCleanupExecuteParams, void> {\n public async execute(params: IChildTasksCleanupExecuteParams): Promise<void> {\n const { context, task } = params;\n\n const { items: childTasks } = await context.tasks.listTasks({\n where: {\n parentId: task.id\n },\n // Really doubtful there will be more than 10k of child tasks.\n limit: 10000\n });\n\n if (childTasks.length === 0) {\n return;\n }\n\n const childTaskIdList = childTasks.map(childTask => childTask.id);\n\n const { items: childLogs } = await context.tasks.listLogs({\n where: {\n task_in: childTaskIdList\n },\n limit: 10000\n });\n\n /**\n * No logs found. Proceed with deleting the child tasks.\n */\n if (childLogs.length === 0) {\n await this.deleteTasks(context, childTaskIdList);\n }\n\n const deletedChildTaskLogIdList: string[] = [];\n /**\n * First, we need to remove all the logs which have no errors.\n */\n for (const log of childLogs) {\n if (log.items.some(item => item.type === TaskLogItemType.ERROR)) {\n continue;\n }\n await context.tasks.deleteLog(log.id);\n if (deletedChildTaskLogIdList.includes(log.task)) {\n continue;\n }\n deletedChildTaskLogIdList.push(log.task);\n }\n /**\n * Now we can remove the tasks.\n */\n await this.deleteTasks(context, deletedChildTaskLogIdList);\n }\n\n /**\n * Helper method to delete tasks by ID.\n */\n private async deleteTasks(context: HcmsBulkActionsContext, taskIds: string[]): Promise<void> {\n for (const taskId of taskIds) {\n await context.tasks.deleteTask(taskId);\n }\n }\n}\n"],"names":["ChildTasksCleanup","params","context","task","childTasks","childTaskIdList","childTask","childLogs","deletedChildTaskLogIdList","log","item","TaskLogItemType","taskIds","taskId"],"mappings":";AAcO,MAAMA;IACT,MAAa,QAAQC,MAAuC,EAAiB;QACzE,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAE,GAAGF;QAE1B,MAAM,EAAE,OAAOG,UAAU,EAAE,GAAG,MAAMF,QAAQ,KAAK,CAAC,SAAS,CAAC;YACxD,OAAO;gBACH,UAAUC,KAAK,EAAE;YACrB;YAEA,OAAO;QACX;QAEA,IAAIC,AAAsB,MAAtBA,WAAW,MAAM,EACjB;QAGJ,MAAMC,kBAAkBD,WAAW,GAAG,CAACE,CAAAA,YAAaA,UAAU,EAAE;QAEhE,MAAM,EAAE,OAAOC,SAAS,EAAE,GAAG,MAAML,QAAQ,KAAK,CAAC,QAAQ,CAAC;YACtD,OAAO;gBACH,SAASG;YACb;YACA,OAAO;QACX;QAKA,IAAIE,AAAqB,MAArBA,UAAU,MAAM,EAChB,MAAM,IAAI,CAAC,WAAW,CAACL,SAASG;QAGpC,MAAMG,4BAAsC,EAAE;QAI9C,KAAK,MAAMC,OAAOF,UACd,KAAIE,IAAI,KAAK,CAAC,IAAI,CAACC,CAAAA,OAAQA,KAAK,IAAI,KAAKC,gBAAgB,KAAK;YAG9D,MAAMT,QAAQ,KAAK,CAAC,SAAS,CAACO,IAAI,EAAE;YACpC,KAAID,0BAA0B,QAAQ,CAACC,IAAI,IAAI,GAG/CD,0BAA0B,IAAI,CAACC,IAAI,IAAI;;QAK3C,MAAM,IAAI,CAAC,WAAW,CAACP,SAASM;IACpC;IAKA,MAAc,YAAYN,OAA+B,EAAEU,OAAiB,EAAiB;QACzF,KAAK,MAAMC,UAAUD,QACjB,MAAMV,QAAQ,KAAK,CAAC,UAAU,CAACW;IAEvC;AACJ"}
1
+ {"version":3,"file":"features/EntriesBulkAction/internals/ChildTasksCleanup.js","sources":["../../../../src/features/EntriesBulkAction/internals/ChildTasksCleanup.ts"],"sourcesContent":["import type { ITask, TasksCrud } from \"@webiny/background-tasks/api\";\nimport { TaskLogItemType } from \"@webiny/background-tasks/api\";\nimport type { IUseCase } from \"~/abstractions/index.js\";\n\nexport interface IChildTasksCleanupExecuteParams {\n tasksCrud: TasksCrud.Interface;\n task: ITask;\n}\n\n/**\n * Cleanup of the child tasks.\n * This code will remove all the child tasks and their logs, which have no errors in them.\n */\nexport class ChildTasksCleanup implements IUseCase<IChildTasksCleanupExecuteParams, void> {\n public async execute(params: IChildTasksCleanupExecuteParams): Promise<void> {\n const { tasksCrud, task } = params;\n\n const { items: childTasks } = await tasksCrud.listTasks({\n where: {\n parentId: task.id\n },\n // Really doubtful there will be more than 10k of child tasks.\n limit: 10000\n });\n\n if (childTasks.length === 0) {\n return;\n }\n\n const childTaskIdList = childTasks.map(childTask => childTask.id);\n\n const { items: childLogs } = await tasksCrud.listLogs({\n where: {\n task_in: childTaskIdList\n },\n limit: 10000\n });\n\n /**\n * No logs found. Proceed with deleting the child tasks.\n */\n if (childLogs.length === 0) {\n await this.deleteTasks(tasksCrud, childTaskIdList);\n }\n\n const deletedChildTaskLogIdList: string[] = [];\n /**\n * First, we need to remove all the logs which have no errors.\n */\n for (const log of childLogs) {\n if (log.items.some(item => item.type === TaskLogItemType.ERROR)) {\n continue;\n }\n await tasksCrud.deleteLog(log.id);\n if (deletedChildTaskLogIdList.includes(log.task)) {\n continue;\n }\n deletedChildTaskLogIdList.push(log.task);\n }\n /**\n * Now we can remove the tasks.\n */\n await this.deleteTasks(tasksCrud, deletedChildTaskLogIdList);\n }\n\n /**\n * Helper method to delete tasks by ID.\n */\n private async deleteTasks(tasksCrud: TasksCrud.Interface, taskIds: string[]): Promise<void> {\n for (const taskId of taskIds) {\n await tasksCrud.deleteTask(taskId);\n }\n }\n}\n"],"names":["ChildTasksCleanup","params","tasksCrud","task","childTasks","childTaskIdList","childTask","childLogs","deletedChildTaskLogIdList","log","item","TaskLogItemType","taskIds","taskId"],"mappings":";AAaO,MAAMA;IACT,MAAa,QAAQC,MAAuC,EAAiB;QACzE,MAAM,EAAEC,SAAS,EAAEC,IAAI,EAAE,GAAGF;QAE5B,MAAM,EAAE,OAAOG,UAAU,EAAE,GAAG,MAAMF,UAAU,SAAS,CAAC;YACpD,OAAO;gBACH,UAAUC,KAAK,EAAE;YACrB;YAEA,OAAO;QACX;QAEA,IAAIC,AAAsB,MAAtBA,WAAW,MAAM,EACjB;QAGJ,MAAMC,kBAAkBD,WAAW,GAAG,CAACE,CAAAA,YAAaA,UAAU,EAAE;QAEhE,MAAM,EAAE,OAAOC,SAAS,EAAE,GAAG,MAAML,UAAU,QAAQ,CAAC;YAClD,OAAO;gBACH,SAASG;YACb;YACA,OAAO;QACX;QAKA,IAAIE,AAAqB,MAArBA,UAAU,MAAM,EAChB,MAAM,IAAI,CAAC,WAAW,CAACL,WAAWG;QAGtC,MAAMG,4BAAsC,EAAE;QAI9C,KAAK,MAAMC,OAAOF,UACd,KAAIE,IAAI,KAAK,CAAC,IAAI,CAACC,CAAAA,OAAQA,KAAK,IAAI,KAAKC,gBAAgB,KAAK;YAG9D,MAAMT,UAAU,SAAS,CAACO,IAAI,EAAE;YAChC,KAAID,0BAA0B,QAAQ,CAACC,IAAI,IAAI,GAG/CD,0BAA0B,IAAI,CAACC,IAAI,IAAI;;QAK3C,MAAM,IAAI,CAAC,WAAW,CAACP,WAAWM;IACtC;IAKA,MAAc,YAAYN,SAA8B,EAAEU,OAAiB,EAAiB;QACxF,KAAK,MAAMC,UAAUD,QACjB,MAAMV,UAAU,UAAU,CAACW;IAEnC;AACJ"}
@@ -1,7 +1,7 @@
1
1
  import type { IBulkActionOperationByModelTaskParams } from "../../../types.js";
2
2
  import { EntriesBulkAction } from "../../../features/EntriesBulkAction/abstractions.js";
3
- import { BulkActionContext } from "../../../features/BulkActionContext/index.js";
4
- import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
3
+ import type { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
4
+ import type { TriggerTaskUseCase } from "@webiny/background-tasks/api";
5
5
  /**
6
6
  * The `CreateTasksByModel` class handles the execution of a task to process entries in batches.
7
7
  */
@@ -9,8 +9,8 @@ export declare class CreateTasksByModel {
9
9
  private readonly taskCache;
10
10
  private readonly batchSize;
11
11
  private readonly bulkAction;
12
- private readonly context;
12
+ private readonly triggerTask;
13
13
  private readonly getModel;
14
- constructor(context: BulkActionContext.Interface, getModel: GetModelUseCase.Interface, bulkAction: EntriesBulkAction.Interface, taskDefinition: string, batchSize: number);
14
+ constructor(getModel: GetModelUseCase.Interface, triggerTask: TriggerTaskUseCase.Interface, bulkAction: EntriesBulkAction.Interface, taskDefinition: string, batchSize: number);
15
15
  execute(params: IBulkActionOperationByModelTaskParams): Promise<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskResultAborted | import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskResultError | import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").TaskDefinition.ResultContinue<import("~/types.js").IBulkActionOperationByModelInput>>;
16
16
  }