@webiny/api-headless-cms-bulk-actions 6.0.0-alpha.5 → 6.0.0-rc.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 (186) hide show
  1. package/README.md +10 -14
  2. package/abstractions/IUseCase.js +1 -5
  3. package/abstractions/index.d.ts +1 -3
  4. package/abstractions/index.js +1 -38
  5. package/abstractions/index.js.map +1 -1
  6. package/domain/BulkActionName.d.ts +3 -0
  7. package/domain/BulkActionName.js +20 -0
  8. package/domain/BulkActionName.js.map +1 -0
  9. package/features/BulkActionContext/abstractions.d.ts +5 -0
  10. package/features/BulkActionContext/abstractions.js +6 -0
  11. package/features/BulkActionContext/abstractions.js.map +1 -0
  12. package/features/BulkActionContext/index.d.ts +1 -0
  13. package/features/BulkActionContext/index.js +3 -0
  14. package/features/BulkActionContext/index.js.map +1 -0
  15. package/features/DeleteEntriesBulkAction/DeleteEntriesBulkAction.d.ts +15 -0
  16. package/features/DeleteEntriesBulkAction/DeleteEntriesBulkAction.js +29 -0
  17. package/features/DeleteEntriesBulkAction/DeleteEntriesBulkAction.js.map +1 -0
  18. package/features/DeleteEntriesBulkAction/feature.d.ts +1 -0
  19. package/features/DeleteEntriesBulkAction/feature.js +10 -0
  20. package/features/DeleteEntriesBulkAction/feature.js.map +1 -0
  21. package/features/EntriesBulkAction/abstractions.d.ts +38 -0
  22. package/features/EntriesBulkAction/abstractions.js +5 -0
  23. package/features/EntriesBulkAction/abstractions.js.map +1 -0
  24. package/features/EntriesBulkAction/createBulkActionTasks.d.ts +2 -0
  25. package/features/EntriesBulkAction/createBulkActionTasks.js +147 -0
  26. package/features/EntriesBulkAction/createBulkActionTasks.js.map +1 -0
  27. package/{useCases/internals/ChildTaskCleanup → features/EntriesBulkAction/internals}/ChildTasksCleanup.d.ts +1 -1
  28. package/{useCases/internals/ChildTaskCleanup → features/EntriesBulkAction/internals}/ChildTasksCleanup.js +3 -10
  29. package/features/EntriesBulkAction/internals/ChildTasksCleanup.js.map +1 -0
  30. package/features/EntriesBulkAction/internals/CreateTasksByModel.d.ts +16 -0
  31. package/features/EntriesBulkAction/internals/CreateTasksByModel.js +107 -0
  32. package/features/EntriesBulkAction/internals/CreateTasksByModel.js.map +1 -0
  33. package/features/EntriesBulkAction/internals/ProcessTask.d.ts +16 -0
  34. package/features/EntriesBulkAction/internals/ProcessTask.js +76 -0
  35. package/features/EntriesBulkAction/internals/ProcessTask.js.map +1 -0
  36. package/{useCases/internals/ProcessTask/Result.d.ts → features/EntriesBulkAction/internals/ProcessTaskResult.d.ts} +1 -1
  37. package/{useCases/internals/ProcessTask/Result.js → features/EntriesBulkAction/internals/ProcessTaskResult.js} +2 -9
  38. package/features/EntriesBulkAction/internals/ProcessTaskResult.js.map +1 -0
  39. package/features/EntriesBulkAction/internals/ProcessTasksByModel.d.ts +13 -0
  40. package/features/EntriesBulkAction/internals/ProcessTasksByModel.js +56 -0
  41. package/features/EntriesBulkAction/internals/ProcessTasksByModel.js.map +1 -0
  42. package/{useCases/internals/CreateTasksByModel → features/EntriesBulkAction/internals}/TaskCache.d.ts +4 -4
  43. package/{useCases/internals/CreateTasksByModel → features/EntriesBulkAction/internals}/TaskCache.js +1 -8
  44. package/features/EntriesBulkAction/internals/TaskCache.js.map +1 -0
  45. package/features/MoveToFolderBulkAction/MoveToFolderBulkAction.d.ts +15 -0
  46. package/features/MoveToFolderBulkAction/MoveToFolderBulkAction.js +30 -0
  47. package/features/MoveToFolderBulkAction/MoveToFolderBulkAction.js.map +1 -0
  48. package/features/MoveToFolderBulkAction/feature.d.ts +1 -0
  49. package/features/MoveToFolderBulkAction/feature.js +10 -0
  50. package/features/MoveToFolderBulkAction/feature.js.map +1 -0
  51. package/features/MoveToTrashBulkAction/MoveToTrashBulkAction.d.ts +15 -0
  52. package/features/MoveToTrashBulkAction/MoveToTrashBulkAction.js +29 -0
  53. package/features/MoveToTrashBulkAction/MoveToTrashBulkAction.js.map +1 -0
  54. package/features/MoveToTrashBulkAction/feature.d.ts +1 -0
  55. package/features/MoveToTrashBulkAction/feature.js +10 -0
  56. package/features/MoveToTrashBulkAction/feature.js.map +1 -0
  57. package/features/PublishEntriesBulkAction/PublishEntriesBulkAction.d.ts +15 -0
  58. package/features/PublishEntriesBulkAction/PublishEntriesBulkAction.js +37 -0
  59. package/features/PublishEntriesBulkAction/PublishEntriesBulkAction.js.map +1 -0
  60. package/features/PublishEntriesBulkAction/feature.d.ts +1 -0
  61. package/features/PublishEntriesBulkAction/feature.js +10 -0
  62. package/features/PublishEntriesBulkAction/feature.js.map +1 -0
  63. package/features/RestoreEntriesBulkAction/RestoreEntriesBulkAction.d.ts +15 -0
  64. package/features/RestoreEntriesBulkAction/RestoreEntriesBulkAction.js +27 -0
  65. package/features/RestoreEntriesBulkAction/RestoreEntriesBulkAction.js.map +1 -0
  66. package/features/RestoreEntriesBulkAction/feature.d.ts +1 -0
  67. package/features/RestoreEntriesBulkAction/feature.js +10 -0
  68. package/features/RestoreEntriesBulkAction/feature.js.map +1 -0
  69. package/features/UnpublishEntriesBulkAction/UnpublishEntriesBulkAction.d.ts +15 -0
  70. package/features/UnpublishEntriesBulkAction/UnpublishEntriesBulkAction.js +27 -0
  71. package/features/UnpublishEntriesBulkAction/UnpublishEntriesBulkAction.js.map +1 -0
  72. package/features/UnpublishEntriesBulkAction/feature.d.ts +1 -0
  73. package/features/UnpublishEntriesBulkAction/feature.js +10 -0
  74. package/features/UnpublishEntriesBulkAction/feature.js.map +1 -0
  75. package/graphql/createBulkActionGraphQL.d.ts +3 -0
  76. package/graphql/createBulkActionGraphQL.js +64 -0
  77. package/graphql/createBulkActionGraphQL.js.map +1 -0
  78. package/graphql/createDefaultGraphQL.d.ts +3 -0
  79. package/{plugins → graphql}/createDefaultGraphQL.js +10 -18
  80. package/graphql/createDefaultGraphQL.js.map +1 -0
  81. package/handlers/eventBridgeEventHandler.js +3 -10
  82. package/handlers/eventBridgeEventHandler.js.map +1 -1
  83. package/handlers/index.d.ts +1 -1
  84. package/handlers/index.js +4 -11
  85. package/handlers/index.js.map +1 -1
  86. package/handlers/setupEventsTenant.js +3 -10
  87. package/handlers/setupEventsTenant.js.map +1 -1
  88. package/index.d.ts +8 -6
  89. package/index.js +46 -69
  90. package/index.js.map +1 -1
  91. package/package.json +19 -23
  92. package/tasks/EmptyTrashBinTaskDefinition.d.ts +26 -0
  93. package/tasks/EmptyTrashBinTaskDefinition.js +124 -0
  94. package/tasks/EmptyTrashBinTaskDefinition.js.map +1 -0
  95. package/tasks/createEmptyTrashBinsTask.d.ts +1 -2
  96. package/tasks/createEmptyTrashBinsTask.js +5 -114
  97. package/tasks/createEmptyTrashBinsTask.js.map +1 -1
  98. package/tasks/index.d.ts +1 -2
  99. package/tasks/index.js +1 -27
  100. package/tasks/index.js.map +1 -1
  101. package/types.d.ts +12 -12
  102. package/types.js +4 -7
  103. package/types.js.map +1 -1
  104. package/abstractions/IListEntries.d.ts +0 -7
  105. package/abstractions/IListEntries.js +0 -7
  106. package/abstractions/IListEntries.js.map +0 -1
  107. package/abstractions/IProcessEntry.d.ts +0 -4
  108. package/abstractions/IProcessEntry.js +0 -7
  109. package/abstractions/IProcessEntry.js.map +0 -1
  110. package/plugins/createBulkAction.d.ts +0 -10
  111. package/plugins/createBulkAction.js +0 -36
  112. package/plugins/createBulkAction.js.map +0 -1
  113. package/plugins/createBulkActionGraphQL.d.ts +0 -7
  114. package/plugins/createBulkActionGraphQL.js +0 -72
  115. package/plugins/createBulkActionGraphQL.js.map +0 -1
  116. package/plugins/createBulkActionTasks.d.ts +0 -9
  117. package/plugins/createBulkActionTasks.js +0 -135
  118. package/plugins/createBulkActionTasks.js.map +0 -1
  119. package/plugins/createDefaultGraphQL.d.ts +0 -3
  120. package/plugins/createDefaultGraphQL.js.map +0 -1
  121. package/plugins/index.d.ts +0 -2
  122. package/plugins/index.js +0 -29
  123. package/plugins/index.js.map +0 -1
  124. package/tasks/createBulkActionEntriesTasks.d.ts +0 -1
  125. package/tasks/createBulkActionEntriesTasks.js +0 -38
  126. package/tasks/createBulkActionEntriesTasks.js.map +0 -1
  127. package/useCases/DeleteEntry.d.ts +0 -10
  128. package/useCases/DeleteEntry.js +0 -26
  129. package/useCases/DeleteEntry.js.map +0 -1
  130. package/useCases/ListDeletedEntries.d.ts +0 -13
  131. package/useCases/ListDeletedEntries.js +0 -28
  132. package/useCases/ListDeletedEntries.js.map +0 -1
  133. package/useCases/ListLatestEntries.d.ts +0 -13
  134. package/useCases/ListLatestEntries.js +0 -28
  135. package/useCases/ListLatestEntries.js.map +0 -1
  136. package/useCases/ListNotPublishedEntries.d.ts +0 -13
  137. package/useCases/ListNotPublishedEntries.js +0 -34
  138. package/useCases/ListNotPublishedEntries.js.map +0 -1
  139. package/useCases/ListPublishedEntries.d.ts +0 -13
  140. package/useCases/ListPublishedEntries.js +0 -28
  141. package/useCases/ListPublishedEntries.js.map +0 -1
  142. package/useCases/MoveEntryToFolder.d.ts +0 -13
  143. package/useCases/MoveEntryToFolder.js +0 -23
  144. package/useCases/MoveEntryToFolder.js.map +0 -1
  145. package/useCases/MoveEntryToTrash.d.ts +0 -10
  146. package/useCases/MoveEntryToTrash.js +0 -26
  147. package/useCases/MoveEntryToTrash.js.map +0 -1
  148. package/useCases/PublishEntry.d.ts +0 -10
  149. package/useCases/PublishEntry.js +0 -20
  150. package/useCases/PublishEntry.js.map +0 -1
  151. package/useCases/RestoreEntryFromTrash.d.ts +0 -10
  152. package/useCases/RestoreEntryFromTrash.js +0 -24
  153. package/useCases/RestoreEntryFromTrash.js.map +0 -1
  154. package/useCases/UnpublishEntry.d.ts +0 -10
  155. package/useCases/UnpublishEntry.js +0 -20
  156. package/useCases/UnpublishEntry.js.map +0 -1
  157. package/useCases/index.d.ts +0 -10
  158. package/useCases/index.js +0 -117
  159. package/useCases/index.js.map +0 -1
  160. package/useCases/internals/ChildTaskCleanup/ChildTasksCleanup.js.map +0 -1
  161. package/useCases/internals/ChildTaskCleanup/index.d.ts +0 -1
  162. package/useCases/internals/ChildTaskCleanup/index.js +0 -18
  163. package/useCases/internals/ChildTaskCleanup/index.js.map +0 -1
  164. package/useCases/internals/CreateTasksByModel/CreateTasksByModel.d.ts +0 -13
  165. package/useCases/internals/CreateTasksByModel/CreateTasksByModel.js +0 -111
  166. package/useCases/internals/CreateTasksByModel/CreateTasksByModel.js.map +0 -1
  167. package/useCases/internals/CreateTasksByModel/TaskCache.js.map +0 -1
  168. package/useCases/internals/CreateTasksByModel/index.d.ts +0 -1
  169. package/useCases/internals/CreateTasksByModel/index.js +0 -18
  170. package/useCases/internals/CreateTasksByModel/index.js.map +0 -1
  171. package/useCases/internals/ProcessTask/ProcessTask.d.ts +0 -14
  172. package/useCases/internals/ProcessTask/ProcessTask.js +0 -81
  173. package/useCases/internals/ProcessTask/ProcessTask.js.map +0 -1
  174. package/useCases/internals/ProcessTask/Result.js.map +0 -1
  175. package/useCases/internals/ProcessTask/index.d.ts +0 -1
  176. package/useCases/internals/ProcessTask/index.js +0 -18
  177. package/useCases/internals/ProcessTask/index.js.map +0 -1
  178. package/useCases/internals/ProcessTasksByModel/ProcessTasksByModel.d.ts +0 -11
  179. package/useCases/internals/ProcessTasksByModel/ProcessTasksByModel.js +0 -67
  180. package/useCases/internals/ProcessTasksByModel/ProcessTasksByModel.js.map +0 -1
  181. package/useCases/internals/ProcessTasksByModel/index.d.ts +0 -1
  182. package/useCases/internals/ProcessTasksByModel/index.js +0 -18
  183. package/useCases/internals/ProcessTasksByModel/index.js.map +0 -1
  184. package/useCases/internals/index.d.ts +0 -4
  185. package/useCases/internals/index.js +0 -51
  186. package/useCases/internals/index.js.map +0 -1
@@ -0,0 +1,107 @@
1
+ import { TaskCache } from "./TaskCache.js";
2
+ import { BulkActionOperationByModelAction } from "../../../types.js";
3
+ const MAX_TASK_LIST_LENGTH = 10;
4
+
5
+ /**
6
+ * The `CreateTasksByModel` class handles the execution of a task to process entries in batches.
7
+ */
8
+ export class CreateTasksByModel {
9
+ constructor(context, getModel, bulkAction, taskDefinition, batchSize) {
10
+ this.getModel = getModel;
11
+ this.taskCache = new TaskCache(taskDefinition);
12
+ this.batchSize = batchSize;
13
+ this.bulkAction = bulkAction;
14
+ this.context = context;
15
+ }
16
+ async execute(params) {
17
+ const {
18
+ input,
19
+ controller
20
+ } = params;
21
+ try {
22
+ const modelResult = await this.getModel.execute(input.modelId);
23
+ if (modelResult.isFail()) {
24
+ return controller.response.error(`Model with ${input.modelId} not found!`);
25
+ }
26
+ const model = modelResult.value;
27
+ const listEntriesParams = {
28
+ where: input.where,
29
+ search: input.search,
30
+ after: input.after,
31
+ limit: this.batchSize
32
+ };
33
+ while (true) {
34
+ if (controller.runtime.isAborted()) {
35
+ return controller.response.aborted();
36
+ } else if (controller.runtime.isCloseToTimeout()) {
37
+ await this.taskCache.triggerTask(this.context, controller.state.getTask());
38
+ return controller.response.continue({
39
+ ...input,
40
+ action: BulkActionOperationByModelAction.PROCESS_SUBTASKS
41
+ });
42
+ }
43
+
44
+ // List entries from the HCMS based on the provided query
45
+ const {
46
+ entries,
47
+ meta
48
+ } = await this.bulkAction.loadData(model, listEntriesParams);
49
+
50
+ // End the task if no entries match the query
51
+ if (meta.totalCount === 0) {
52
+ return controller.response.continue({
53
+ ...input,
54
+ action: BulkActionOperationByModelAction.END_TASK
55
+ });
56
+ }
57
+
58
+ // Continue processing if we are reached the task list length limit
59
+ if (this.taskCache.getTasksLength() === MAX_TASK_LIST_LENGTH) {
60
+ await this.taskCache.triggerTask(this.context, controller.state.getTask());
61
+ return controller.response.continue({
62
+ ...input,
63
+ action: BulkActionOperationByModelAction.PROCESS_SUBTASKS
64
+ });
65
+ }
66
+
67
+ // Continue processing if no entries are returned in the current batch
68
+ if (entries.length === 0) {
69
+ await this.taskCache.triggerTask(this.context, controller.state.getTask());
70
+ return controller.response.continue({
71
+ ...input,
72
+ action: BulkActionOperationByModelAction.PROCESS_SUBTASKS
73
+ });
74
+ }
75
+
76
+ // Extract entry IDs
77
+ const ids = [];
78
+ for (let i = 0; i < entries.length; i++) {
79
+ ids.push(entries[i].id);
80
+ }
81
+ if (ids.length > 0) {
82
+ // Cache the task with the entry IDs
83
+ this.taskCache.cacheTask({
84
+ modelId: input.modelId,
85
+ identity: input.identity,
86
+ data: input.data,
87
+ ids
88
+ });
89
+ }
90
+
91
+ // Continue processing if there are no more entries or pagination is complete
92
+ if (!meta.hasMoreItems || !meta.cursor) {
93
+ await this.taskCache.triggerTask(this.context, controller.state.getTask());
94
+ return controller.response.continue({
95
+ ...input,
96
+ action: BulkActionOperationByModelAction.PROCESS_SUBTASKS
97
+ });
98
+ }
99
+ listEntriesParams.after = meta.cursor;
100
+ }
101
+ } catch (ex) {
102
+ return controller.response.error(ex.message ?? `Error while creating task.`);
103
+ }
104
+ }
105
+ }
106
+
107
+ //# sourceMappingURL=CreateTasksByModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TaskCache","BulkActionOperationByModelAction","MAX_TASK_LIST_LENGTH","CreateTasksByModel","constructor","context","getModel","bulkAction","taskDefinition","batchSize","taskCache","execute","params","input","controller","modelResult","modelId","isFail","response","error","model","value","listEntriesParams","where","search","after","limit","runtime","isAborted","aborted","isCloseToTimeout","triggerTask","state","getTask","continue","action","PROCESS_SUBTASKS","entries","meta","loadData","totalCount","END_TASK","getTasksLength","length","ids","i","push","id","cacheTask","identity","data","hasMoreItems","cursor","ex","message"],"sources":["CreateTasksByModel.ts"],"sourcesContent":["import type { CmsEntryListParams } from \"@webiny/api-headless-cms/types/index.js\";\nimport { TaskCache } from \"./TaskCache.js\";\nimport type { IBulkActionOperationByModelTaskParams } from \"~/types.js\";\nimport { BulkActionOperationByModelAction } from \"~/types.js\";\nimport { EntriesBulkAction } from \"~/features/EntriesBulkAction/abstractions.js\";\nimport { BulkActionContext } from \"~/features/BulkActionContext/index.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\n\nconst MAX_TASK_LIST_LENGTH = 10;\n\n/**\n * The `CreateTasksByModel` class handles the execution of a task to process entries in batches.\n */\nexport class CreateTasksByModel {\n private readonly taskCache: TaskCache;\n private readonly batchSize: number;\n private readonly bulkAction: EntriesBulkAction.Interface;\n private readonly context: BulkActionContext.Interface;\n private readonly getModel: GetModelUseCase.Interface;\n\n constructor(\n context: BulkActionContext.Interface,\n getModel: GetModelUseCase.Interface,\n bulkAction: EntriesBulkAction.Interface,\n taskDefinition: string,\n batchSize: number\n ) {\n this.getModel = getModel;\n this.taskCache = new TaskCache(taskDefinition);\n this.batchSize = batchSize;\n this.bulkAction = bulkAction;\n this.context = context;\n }\n\n async execute(params: IBulkActionOperationByModelTaskParams) {\n const { input, controller } = params;\n\n try {\n const modelResult = await this.getModel.execute(input.modelId);\n\n if (modelResult.isFail()) {\n return controller.response.error(`Model with ${input.modelId} not found!`);\n }\n\n const model = modelResult.value;\n\n const listEntriesParams: CmsEntryListParams = {\n where: input.where,\n search: input.search,\n after: input.after,\n limit: this.batchSize\n };\n\n while (true) {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n } else if (controller.runtime.isCloseToTimeout()) {\n await this.taskCache.triggerTask(this.context, controller.state.getTask());\n return controller.response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n // List entries from the HCMS based on the provided query\n const { entries, meta } = await this.bulkAction.loadData(model, listEntriesParams);\n\n // End the task if no entries match the query\n if (meta.totalCount === 0) {\n return controller.response.continue({\n ...input,\n action: BulkActionOperationByModelAction.END_TASK\n });\n }\n\n // Continue processing if we are reached the task list length limit\n if (this.taskCache.getTasksLength() === MAX_TASK_LIST_LENGTH) {\n await this.taskCache.triggerTask(this.context, controller.state.getTask());\n return controller.response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n // Continue processing if no entries are returned in the current batch\n if (entries.length === 0) {\n await this.taskCache.triggerTask(this.context, controller.state.getTask());\n return controller.response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n // Extract entry IDs\n const ids: string[] = [];\n for (let i = 0; i < entries.length; i++) {\n ids.push(entries[i].id);\n }\n\n if (ids.length > 0) {\n // Cache the task with the entry IDs\n this.taskCache.cacheTask({\n modelId: input.modelId,\n identity: input.identity,\n data: input.data,\n ids\n });\n }\n\n // Continue processing if there are no more entries or pagination is complete\n if (!meta.hasMoreItems || !meta.cursor) {\n await this.taskCache.triggerTask(this.context, controller.state.getTask());\n\n return controller.response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n listEntriesParams.after = meta.cursor;\n }\n } catch (ex) {\n return controller.response.error(ex.message ?? `Error while creating task.`);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,16 @@
1
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
2
+ import { EntriesBulkAction } from "../../../features/EntriesBulkAction/abstractions.js";
3
+ import type { IBulkActionOperationTaskParams } from "../../../types.js";
4
+ /**
5
+ * The `ProcessTask` class is responsible for processing a batch of entries
6
+ * based on the provided parameters. It uses a gateway to perform the actual
7
+ * processing and maintains the results of the operations, including successfully
8
+ * processed and failed entries.
9
+ */
10
+ export declare class ProcessTask {
11
+ private bulkAction;
12
+ private getModel;
13
+ private readonly result;
14
+ constructor(bulkAction: EntriesBulkAction.Interface, getModel: GetModelUseCase.Interface);
15
+ execute({ input, controller }: IBulkActionOperationTaskParams): Promise<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskResultAborted | import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").TaskDefinition.ResultContinue<import("~/types.js").IBulkActionOperationInput> | import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskResultError | import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").TaskDefinition.ResultDone<import("~/types.js").IBulkActionOperationOutput>>;
16
+ }
@@ -0,0 +1,76 @@
1
+ import { ProcessTaskResult } from "./ProcessTaskResult.js";
2
+ /**
3
+ * The `ProcessTask` class is responsible for processing a batch of entries
4
+ * based on the provided parameters. It uses a gateway to perform the actual
5
+ * processing and maintains the results of the operations, including successfully
6
+ * processed and failed entries.
7
+ */
8
+ export class ProcessTask {
9
+ constructor(bulkAction, getModel) {
10
+ this.bulkAction = bulkAction;
11
+ this.getModel = getModel;
12
+ this.result = new ProcessTaskResult();
13
+ }
14
+ async execute({
15
+ input,
16
+ controller
17
+ }) {
18
+ try {
19
+ if (controller.runtime.isAborted()) {
20
+ return controller.response.aborted();
21
+ } else if (controller.runtime.isCloseToTimeout()) {
22
+ return controller.response.continue({
23
+ ...input
24
+ });
25
+ }
26
+
27
+ // Check if the input contains a model ID.
28
+ if (!input.modelId) {
29
+ return controller.response.error(`Missing "modelId" in the input.`);
30
+ }
31
+
32
+ // Check if the model exists.
33
+ const modelResult = await this.getModel.execute(input.modelId);
34
+ if (modelResult.isFail()) {
35
+ return controller.response.error(`Model with ${input.modelId} not found!`);
36
+ }
37
+ const model = modelResult.value;
38
+
39
+ // Check if there are any IDs to process.
40
+ if (!input.ids || input.ids.length === 0) {
41
+ return controller.response.done(`Task done: no entries to process for "${input.modelId}" model.`, {
42
+ done: [],
43
+ failed: []
44
+ });
45
+ }
46
+
47
+ // Process each ID in the input.
48
+ for (const id of input.ids) {
49
+ try {
50
+ // Execute the gateway operation for the current ID.
51
+ await this.bulkAction.processData(model, {
52
+ id,
53
+ data: input.data
54
+ });
55
+
56
+ // Add the ID to the list of successfully processed entries.
57
+ this.result.addDone(id);
58
+ } catch (ex) {
59
+ console.error(ex.message || `Failed to process entry with id "${id}".`);
60
+ // Add the ID to the list of failed entries.
61
+ this.result.addFailed(id);
62
+ }
63
+ }
64
+
65
+ // Return a done response with the results of the processing.
66
+ return controller.response.done(`Task done: all entries processed for "${model.name}" model.`, {
67
+ done: this.result.getDone(),
68
+ failed: this.result.getFailed()
69
+ });
70
+ } catch (ex) {
71
+ return controller.response.error(ex.message ?? `Error while processing task.`);
72
+ }
73
+ }
74
+ }
75
+
76
+ //# sourceMappingURL=ProcessTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ProcessTaskResult","ProcessTask","constructor","bulkAction","getModel","result","execute","input","controller","runtime","isAborted","response","aborted","isCloseToTimeout","continue","modelId","error","modelResult","isFail","model","value","ids","length","done","failed","id","processData","data","addDone","ex","console","message","addFailed","name","getDone","getFailed"],"sources":["ProcessTask.ts"],"sourcesContent":["import { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { EntriesBulkAction } from \"~/features/EntriesBulkAction/abstractions.js\";\nimport { ProcessTaskResult } from \"./ProcessTaskResult.js\";\nimport type { IBulkActionOperationTaskParams } from \"~/types.js\";\n\n/**\n * The `ProcessTask` class is responsible for processing a batch of entries\n * based on the provided parameters. It uses a gateway to perform the actual\n * processing and maintains the results of the operations, including successfully\n * processed and failed entries.\n */\nexport class ProcessTask {\n private readonly result: ProcessTaskResult;\n\n constructor(\n private bulkAction: EntriesBulkAction.Interface,\n private getModel: GetModelUseCase.Interface\n ) {\n this.result = new ProcessTaskResult();\n }\n\n async execute({ input, controller }: IBulkActionOperationTaskParams) {\n try {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n } else if (controller.runtime.isCloseToTimeout()) {\n return controller.response.continue({\n ...input\n });\n }\n\n // Check if the input contains a model ID.\n if (!input.modelId) {\n return controller.response.error(`Missing \"modelId\" in the input.`);\n }\n\n // Check if the model exists.\n const modelResult = await this.getModel.execute(input.modelId);\n\n if (modelResult.isFail()) {\n return controller.response.error(`Model with ${input.modelId} not found!`);\n }\n\n const model = modelResult.value;\n\n // Check if there are any IDs to process.\n if (!input.ids || input.ids.length === 0) {\n return controller.response.done(\n `Task done: no entries to process for \"${input.modelId}\" model.`,\n {\n done: [],\n failed: []\n }\n );\n }\n\n // Process each ID in the input.\n for (const id of input.ids) {\n try {\n // Execute the gateway operation for the current ID.\n await this.bulkAction.processData(model, {\n id,\n data: input.data\n });\n\n // Add the ID to the list of successfully processed entries.\n this.result.addDone(id);\n } catch (ex) {\n console.error(ex.message || `Failed to process entry with id \"${id}\".`);\n // Add the ID to the list of failed entries.\n this.result.addFailed(id);\n }\n }\n\n // Return a done response with the results of the processing.\n return controller.response.done(\n `Task done: all entries processed for \"${model.name}\" model.`,\n {\n done: this.result.getDone(),\n failed: this.result.getFailed()\n }\n );\n } catch (ex) {\n return controller.response.error(ex.message ?? `Error while processing task.`);\n }\n }\n}\n"],"mappings":"AAEA,SAASA,iBAAiB;AAG1B;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAW,CAAC;EAGrBC,WAAWA,CACCC,UAAuC,EACvCC,QAAmC,EAC7C;IAAA,KAFUD,UAAuC,GAAvCA,UAAuC;IAAA,KACvCC,QAAmC,GAAnCA,QAAmC;IAE3C,IAAI,CAACC,MAAM,GAAG,IAAIL,iBAAiB,CAAC,CAAC;EACzC;EAEA,MAAMM,OAAOA,CAAC;IAAEC,KAAK;IAAEC;EAA2C,CAAC,EAAE;IACjE,IAAI;MACA,IAAIA,UAAU,CAACC,OAAO,CAACC,SAAS,CAAC,CAAC,EAAE;QAChC,OAAOF,UAAU,CAACG,QAAQ,CAACC,OAAO,CAAC,CAAC;MACxC,CAAC,MAAM,IAAIJ,UAAU,CAACC,OAAO,CAACI,gBAAgB,CAAC,CAAC,EAAE;QAC9C,OAAOL,UAAU,CAACG,QAAQ,CAACG,QAAQ,CAAC;UAChC,GAAGP;QACP,CAAC,CAAC;MACN;;MAEA;MACA,IAAI,CAACA,KAAK,CAACQ,OAAO,EAAE;QAChB,OAAOP,UAAU,CAACG,QAAQ,CAACK,KAAK,CAAC,iCAAiC,CAAC;MACvE;;MAEA;MACA,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACb,QAAQ,CAACE,OAAO,CAACC,KAAK,CAACQ,OAAO,CAAC;MAE9D,IAAIE,WAAW,CAACC,MAAM,CAAC,CAAC,EAAE;QACtB,OAAOV,UAAU,CAACG,QAAQ,CAACK,KAAK,CAAC,cAAcT,KAAK,CAACQ,OAAO,aAAa,CAAC;MAC9E;MAEA,MAAMI,KAAK,GAAGF,WAAW,CAACG,KAAK;;MAE/B;MACA,IAAI,CAACb,KAAK,CAACc,GAAG,IAAId,KAAK,CAACc,GAAG,CAACC,MAAM,KAAK,CAAC,EAAE;QACtC,OAAOd,UAAU,CAACG,QAAQ,CAACY,IAAI,CAC3B,yCAAyChB,KAAK,CAACQ,OAAO,UAAU,EAChE;UACIQ,IAAI,EAAE,EAAE;UACRC,MAAM,EAAE;QACZ,CACJ,CAAC;MACL;;MAEA;MACA,KAAK,MAAMC,EAAE,IAAIlB,KAAK,CAACc,GAAG,EAAE;QACxB,IAAI;UACA;UACA,MAAM,IAAI,CAAClB,UAAU,CAACuB,WAAW,CAACP,KAAK,EAAE;YACrCM,EAAE;YACFE,IAAI,EAAEpB,KAAK,CAACoB;UAChB,CAAC,CAAC;;UAEF;UACA,IAAI,CAACtB,MAAM,CAACuB,OAAO,CAACH,EAAE,CAAC;QAC3B,CAAC,CAAC,OAAOI,EAAE,EAAE;UACTC,OAAO,CAACd,KAAK,CAACa,EAAE,CAACE,OAAO,IAAI,oCAAoCN,EAAE,IAAI,CAAC;UACvE;UACA,IAAI,CAACpB,MAAM,CAAC2B,SAAS,CAACP,EAAE,CAAC;QAC7B;MACJ;;MAEA;MACA,OAAOjB,UAAU,CAACG,QAAQ,CAACY,IAAI,CAC3B,yCAAyCJ,KAAK,CAACc,IAAI,UAAU,EAC7D;QACIV,IAAI,EAAE,IAAI,CAAClB,MAAM,CAAC6B,OAAO,CAAC,CAAC;QAC3BV,MAAM,EAAE,IAAI,CAACnB,MAAM,CAAC8B,SAAS,CAAC;MAClC,CACJ,CAAC;IACL,CAAC,CAAC,OAAON,EAAE,EAAE;MACT,OAAOrB,UAAU,CAACG,QAAQ,CAACK,KAAK,CAACa,EAAE,CAACE,OAAO,IAAI,8BAA8B,CAAC;IAClF;EACJ;AACJ","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- export declare class Result {
1
+ export declare class ProcessTaskResult {
2
2
  private readonly done;
3
3
  private readonly failed;
4
4
  constructor();
@@ -1,10 +1,4 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Result = void 0;
7
- class Result {
1
+ export class ProcessTaskResult {
8
2
  constructor() {
9
3
  this.done = new Set();
10
4
  this.failed = new Set();
@@ -24,6 +18,5 @@ class Result {
24
18
  return Array.from(this.done);
25
19
  }
26
20
  }
27
- exports.Result = Result;
28
21
 
29
- //# sourceMappingURL=Result.js.map
22
+ //# sourceMappingURL=ProcessTaskResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ProcessTaskResult","constructor","done","Set","failed","addDone","entryId","delete","add","addFailed","getFailed","Array","from","getDone"],"sources":["ProcessTaskResult.ts"],"sourcesContent":["export class ProcessTaskResult {\n private readonly done: Set<string>;\n private readonly failed: Set<string>;\n\n public constructor() {\n this.done = new Set();\n this.failed = new Set();\n }\n\n public addDone(entryId: string): void {\n this.failed.delete(entryId);\n this.done.add(entryId);\n }\n\n public addFailed(entryId: string): void {\n this.failed.add(entryId);\n this.done.delete(entryId);\n }\n\n public getFailed() {\n return Array.from(this.failed);\n }\n\n public getDone() {\n return Array.from(this.done);\n }\n}\n"],"mappings":"AAAA,OAAO,MAAMA,iBAAiB,CAAC;EAIpBC,WAAWA,CAAA,EAAG;IACjB,IAAI,CAACC,IAAI,GAAG,IAAIC,GAAG,CAAC,CAAC;IACrB,IAAI,CAACC,MAAM,GAAG,IAAID,GAAG,CAAC,CAAC;EAC3B;EAEOE,OAAOA,CAACC,OAAe,EAAQ;IAClC,IAAI,CAACF,MAAM,CAACG,MAAM,CAACD,OAAO,CAAC;IAC3B,IAAI,CAACJ,IAAI,CAACM,GAAG,CAACF,OAAO,CAAC;EAC1B;EAEOG,SAASA,CAACH,OAAe,EAAQ;IACpC,IAAI,CAACF,MAAM,CAACI,GAAG,CAACF,OAAO,CAAC;IACxB,IAAI,CAACJ,IAAI,CAACK,MAAM,CAACD,OAAO,CAAC;EAC7B;EAEOI,SAASA,CAAA,EAAG;IACf,OAAOC,KAAK,CAACC,IAAI,CAAC,IAAI,CAACR,MAAM,CAAC;EAClC;EAEOS,OAAOA,CAAA,EAAG;IACb,OAAOF,KAAK,CAACC,IAAI,CAAC,IAAI,CAACV,IAAI,CAAC;EAChC;AACJ","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ import type { IBulkActionOperationByModelTaskParams } from "../../../types.js";
2
+ import { BulkActionContext } from "../../../features/BulkActionContext/index.js";
3
+ /**
4
+ * The `ProcessTasksByModel` class is responsible for processing tasks for a specific model.
5
+ * It checks for any running or pending tasks from the parent task and continues or completes
6
+ * the task based on the status.
7
+ */
8
+ export declare class ProcessTasksByModel {
9
+ private context;
10
+ private readonly taskDefinition;
11
+ constructor(context: BulkActionContext.Interface, taskDefinition: string);
12
+ execute({ input, controller }: IBulkActionOperationByModelTaskParams): Promise<import("@webiny/api-core/features/task/TaskDefinition").ITaskResultAborted | import("@webiny/api-core/features/task/TaskDefinition").ITaskResultError | import("@webiny/api-core/features/task/TaskDefinition").TaskDefinition.ResultContinue<import("~/types.js").IBulkActionOperationByModelInput>>;
13
+ }
@@ -0,0 +1,56 @@
1
+ import { TaskDataStatus } from "@webiny/tasks";
2
+ import { BulkActionOperationByModelAction } from "../../../types.js";
3
+ /**
4
+ * The `ProcessTasksByModel` class is responsible for processing tasks for a specific model.
5
+ * It checks for any running or pending tasks from the parent task and continues or completes
6
+ * the task based on the status.
7
+ */
8
+ export class ProcessTasksByModel {
9
+ constructor(context, taskDefinition) {
10
+ this.context = context;
11
+ this.taskDefinition = taskDefinition;
12
+ }
13
+ async execute({
14
+ input,
15
+ controller
16
+ }) {
17
+ try {
18
+ if (controller.runtime.isAborted()) {
19
+ return controller.response.aborted();
20
+ } else if (controller.runtime.isCloseToTimeout()) {
21
+ return controller.response.continue({
22
+ ...input,
23
+ action: BulkActionOperationByModelAction.PROCESS_SUBTASKS
24
+ });
25
+ }
26
+ const {
27
+ items
28
+ } = await this.context.tasks.listTasks({
29
+ where: {
30
+ parentId: controller.state.getTask().id,
31
+ definitionId: this.taskDefinition,
32
+ taskStatus_in: [TaskDataStatus.RUNNING, TaskDataStatus.PENDING]
33
+ },
34
+ limit: 1
35
+ });
36
+
37
+ // If there are running or pending tasks, continue with a wait.
38
+ if (items.length > 0) {
39
+ return controller.response.continue({
40
+ ...input,
41
+ action: BulkActionOperationByModelAction.PROCESS_SUBTASKS
42
+ }, {
43
+ seconds: 120
44
+ });
45
+ }
46
+ return controller.response.continue({
47
+ ...input,
48
+ action: BulkActionOperationByModelAction.CHECK_MORE_SUBTASKS
49
+ });
50
+ } catch (ex) {
51
+ return controller.response.error(ex.message ?? `Error while processing task "${this.taskDefinition}"`);
52
+ }
53
+ }
54
+ }
55
+
56
+ //# sourceMappingURL=ProcessTasksByModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TaskDataStatus","BulkActionOperationByModelAction","ProcessTasksByModel","constructor","context","taskDefinition","execute","input","controller","runtime","isAborted","response","aborted","isCloseToTimeout","continue","action","PROCESS_SUBTASKS","items","tasks","listTasks","where","parentId","state","getTask","id","definitionId","taskStatus_in","RUNNING","PENDING","limit","length","seconds","CHECK_MORE_SUBTASKS","ex","error","message"],"sources":["ProcessTasksByModel.ts"],"sourcesContent":["import { TaskDataStatus } from \"@webiny/tasks\";\nimport type { IBulkActionOperationByModelTaskParams } from \"~/types.js\";\nimport { BulkActionOperationByModelAction } from \"~/types.js\";\nimport { BulkActionContext } from \"~/features/BulkActionContext/index.js\";\n\n/**\n * The `ProcessTasksByModel` class is responsible for processing tasks for a specific model.\n * It checks for any running or pending tasks from the parent task and continues or completes\n * the task based on the status.\n */\nexport class ProcessTasksByModel {\n private context: BulkActionContext.Interface;\n private readonly taskDefinition: string;\n\n constructor(context: BulkActionContext.Interface, taskDefinition: string) {\n this.context = context;\n this.taskDefinition = taskDefinition;\n }\n\n async execute({ input, controller }: IBulkActionOperationByModelTaskParams) {\n try {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n } else if (controller.runtime.isCloseToTimeout()) {\n return controller.response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n const { items } = await this.context.tasks.listTasks({\n where: {\n parentId: controller.state.getTask().id,\n definitionId: this.taskDefinition,\n taskStatus_in: [TaskDataStatus.RUNNING, TaskDataStatus.PENDING]\n },\n limit: 1\n });\n\n // If there are running or pending tasks, continue with a wait.\n if (items.length > 0) {\n return controller.response.continue(\n {\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n },\n {\n seconds: 120\n }\n );\n }\n\n return controller.response.continue({\n ...input,\n action: BulkActionOperationByModelAction.CHECK_MORE_SUBTASKS\n });\n } catch (ex) {\n return controller.response.error(\n ex.message ?? `Error while processing task \"${this.taskDefinition}\"`\n );\n }\n }\n}\n"],"mappings":"AAAA,SAASA,cAAc,QAAQ,eAAe;AAE9C,SAASC,gCAAgC;AAGzC;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,mBAAmB,CAAC;EAI7BC,WAAWA,CAACC,OAAoC,EAAEC,cAAsB,EAAE;IACtE,IAAI,CAACD,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,cAAc,GAAGA,cAAc;EACxC;EAEA,MAAMC,OAAOA,CAAC;IAAEC,KAAK;IAAEC;EAAkD,CAAC,EAAE;IACxE,IAAI;MACA,IAAIA,UAAU,CAACC,OAAO,CAACC,SAAS,CAAC,CAAC,EAAE;QAChC,OAAOF,UAAU,CAACG,QAAQ,CAACC,OAAO,CAAC,CAAC;MACxC,CAAC,MAAM,IAAIJ,UAAU,CAACC,OAAO,CAACI,gBAAgB,CAAC,CAAC,EAAE;QAC9C,OAAOL,UAAU,CAACG,QAAQ,CAACG,QAAQ,CAAC;UAChC,GAAGP,KAAK;UACRQ,MAAM,EAAEd,gCAAgC,CAACe;QAC7C,CAAC,CAAC;MACN;MAEA,MAAM;QAAEC;MAAM,CAAC,GAAG,MAAM,IAAI,CAACb,OAAO,CAACc,KAAK,CAACC,SAAS,CAAC;QACjDC,KAAK,EAAE;UACHC,QAAQ,EAAEb,UAAU,CAACc,KAAK,CAACC,OAAO,CAAC,CAAC,CAACC,EAAE;UACvCC,YAAY,EAAE,IAAI,CAACpB,cAAc;UACjCqB,aAAa,EAAE,CAAC1B,cAAc,CAAC2B,OAAO,EAAE3B,cAAc,CAAC4B,OAAO;QAClE,CAAC;QACDC,KAAK,EAAE;MACX,CAAC,CAAC;;MAEF;MACA,IAAIZ,KAAK,CAACa,MAAM,GAAG,CAAC,EAAE;QAClB,OAAOtB,UAAU,CAACG,QAAQ,CAACG,QAAQ,CAC/B;UACI,GAAGP,KAAK;UACRQ,MAAM,EAAEd,gCAAgC,CAACe;QAC7C,CAAC,EACD;UACIe,OAAO,EAAE;QACb,CACJ,CAAC;MACL;MAEA,OAAOvB,UAAU,CAACG,QAAQ,CAACG,QAAQ,CAAC;QAChC,GAAGP,KAAK;QACRQ,MAAM,EAAEd,gCAAgC,CAAC+B;MAC7C,CAAC,CAAC;IACN,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,OAAOzB,UAAU,CAACG,QAAQ,CAACuB,KAAK,CAC5BD,EAAE,CAACE,OAAO,IAAI,gCAAgC,IAAI,CAAC9B,cAAc,GACrE,CAAC;IACL;EACJ;AACJ","ignoreList":[]}
@@ -1,10 +1,10 @@
1
- import type { HcmsBulkActionsContext } from "../../../types";
2
- import type { ITask, ITaskDataInput } from "@webiny/tasks";
1
+ import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
+ import type { HcmsBulkActionsContext } from "../../../types.js";
3
3
  /**
4
4
  * TaskCache class for managing and triggering cached tasks.
5
5
  * @template TTask - Task input data.
6
6
  */
7
- export declare class TaskCache<TTask = ITaskDataInput> {
7
+ export declare class TaskCache<TTask extends TaskDefinition.TaskInput = TaskDefinition.TaskInput> {
8
8
  private readonly taskDefinition;
9
9
  private taskCache;
10
10
  constructor(taskDefinition: string);
@@ -18,7 +18,7 @@ export declare class TaskCache<TTask = ITaskDataInput> {
18
18
  * @param {HcmsBulkActionsContext} context - The context used to trigger the tasks.
19
19
  * @param {ITask} parent - The parent task to associate with the triggered tasks.
20
20
  */
21
- triggerTask(context: HcmsBulkActionsContext, parent: ITask): Promise<void>;
21
+ triggerTask(context: HcmsBulkActionsContext, parent: TaskDefinition.Task): Promise<void>;
22
22
  /**
23
23
  * Retrieves the cached tasks length.
24
24
  * @returns number
@@ -1,14 +1,8 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.TaskCache = void 0;
7
1
  /**
8
2
  * TaskCache class for managing and triggering cached tasks.
9
3
  * @template TTask - Task input data.
10
4
  */
11
- class TaskCache {
5
+ export class TaskCache {
12
6
  taskCache = [];
13
7
  constructor(taskDefinition) {
14
8
  this.taskDefinition = taskDefinition;
@@ -71,6 +65,5 @@ class TaskCache {
71
65
  this.taskCache = [];
72
66
  }
73
67
  }
74
- exports.TaskCache = TaskCache;
75
68
 
76
69
  //# sourceMappingURL=TaskCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TaskCache","taskCache","constructor","taskDefinition","cacheTask","item","push","triggerTask","context","parent","tasks","getTasks","length","task","trigger","definition","input","error","console","clearTasks","getTasksLength"],"sources":["TaskCache.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport type { HcmsBulkActionsContext } from \"~/types.js\";\n\n/**\n * TaskCache class for managing and triggering cached tasks.\n * @template TTask - Task input data.\n */\nexport class TaskCache<TTask extends TaskDefinition.TaskInput = TaskDefinition.TaskInput> {\n private readonly taskDefinition: string;\n private taskCache: TTask[] = [];\n\n constructor(taskDefinition: string) {\n this.taskDefinition = taskDefinition;\n }\n\n /**\n * Adds a task to the cache.\n * @param {TTask} item - The task input data to be cached.\n */\n cacheTask(item: TTask) {\n this.taskCache.push(item);\n }\n\n /**\n * Triggers all cached tasks using the provided context and parent task.\n * @param {HcmsBulkActionsContext} context - The context used to trigger the tasks.\n * @param {ITask} parent - The parent task to associate with the triggered tasks.\n */\n async triggerTask(context: HcmsBulkActionsContext, parent: TaskDefinition.Task) {\n const tasks = this.getTasks();\n\n if (tasks.length === 0) {\n return;\n }\n\n for (const task of tasks) {\n try {\n await context.tasks.trigger<TTask>({\n definition: this.taskDefinition,\n parent,\n input: task\n });\n } catch (error) {\n console.error(`Error triggering task.`, error);\n }\n }\n\n // Clear the cache after processing\n this.clearTasks();\n }\n\n /**\n * Retrieves the cached tasks length.\n * @returns number\n */\n getTasksLength() {\n return this.getTasks().length;\n }\n\n /**\n * Retrieves the cached tasks.\n * @returns {TTask[]} The list of cached tasks.\n */\n private getTasks() {\n return this.taskCache;\n }\n\n /**\n * Clears all cached tasks.\n */\n private clearTasks() {\n this.taskCache = [];\n }\n}\n"],"mappings":"AAGA;AACA;AACA;AACA;AACA,OAAO,MAAMA,SAAS,CAAoE;EAE9EC,SAAS,GAAY,EAAE;EAE/BC,WAAWA,CAACC,cAAsB,EAAE;IAChC,IAAI,CAACA,cAAc,GAAGA,cAAc;EACxC;;EAEA;AACJ;AACA;AACA;EACIC,SAASA,CAACC,IAAW,EAAE;IACnB,IAAI,CAACJ,SAAS,CAACK,IAAI,CAACD,IAAI,CAAC;EAC7B;;EAEA;AACJ;AACA;AACA;AACA;EACI,MAAME,WAAWA,CAACC,OAA+B,EAAEC,MAA2B,EAAE;IAC5E,MAAMC,KAAK,GAAG,IAAI,CAACC,QAAQ,CAAC,CAAC;IAE7B,IAAID,KAAK,CAACE,MAAM,KAAK,CAAC,EAAE;MACpB;IACJ;IAEA,KAAK,MAAMC,IAAI,IAAIH,KAAK,EAAE;MACtB,IAAI;QACA,MAAMF,OAAO,CAACE,KAAK,CAACI,OAAO,CAAQ;UAC/BC,UAAU,EAAE,IAAI,CAACZ,cAAc;UAC/BM,MAAM;UACNO,KAAK,EAAEH;QACX,CAAC,CAAC;MACN,CAAC,CAAC,OAAOI,KAAK,EAAE;QACZC,OAAO,CAACD,KAAK,CAAC,wBAAwB,EAAEA,KAAK,CAAC;MAClD;IACJ;;IAEA;IACA,IAAI,CAACE,UAAU,CAAC,CAAC;EACrB;;EAEA;AACJ;AACA;AACA;EACIC,cAAcA,CAAA,EAAG;IACb,OAAO,IAAI,CAACT,QAAQ,CAAC,CAAC,CAACC,MAAM;EACjC;;EAEA;AACJ;AACA;AACA;EACYD,QAAQA,CAAA,EAAG;IACf,OAAO,IAAI,CAACV,SAAS;EACzB;;EAEA;AACJ;AACA;EACYkB,UAAUA,CAAA,EAAG;IACjB,IAAI,CAAClB,SAAS,GAAG,EAAE;EACvB;AACJ","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries/index.js";
2
+ import { MoveEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/MoveEntry/index.js";
3
+ import { EntriesBulkAction } from "../../features/EntriesBulkAction/abstractions.js";
4
+ declare class MoveToFolderBulkActionImpl implements EntriesBulkAction.Interface {
5
+ private listLatestEntries;
6
+ private moveEntry;
7
+ readonly name = "moveToFolder";
8
+ constructor(listLatestEntries: ListLatestEntriesUseCase.Interface, moveEntry: MoveEntryUseCase.Interface);
9
+ loadData(model: EntriesBulkAction.Model, params: EntriesBulkAction.LoadDataParams): Promise<EntriesBulkAction.LoadDataResult>;
10
+ processData(model: EntriesBulkAction.Model, params: EntriesBulkAction.ProcessParams): Promise<void>;
11
+ }
12
+ export declare const MoveToFolderBulkAction: typeof MoveToFolderBulkActionImpl & {
13
+ __abstraction: import("@webiny/di").Abstraction<import("~/features/EntriesBulkAction/abstractions.js").IEntriesBulkAction>;
14
+ };
15
+ export {};
@@ -0,0 +1,30 @@
1
+ import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries/index.js";
2
+ import { MoveEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/MoveEntry/index.js";
3
+ import { parseIdentifier } from "@webiny/utils";
4
+ import { EntriesBulkAction } from "../EntriesBulkAction/abstractions.js";
5
+ class MoveToFolderBulkActionImpl {
6
+ name = "moveToFolder";
7
+ constructor(listLatestEntries, moveEntry) {
8
+ this.listLatestEntries = listLatestEntries;
9
+ this.moveEntry = moveEntry;
10
+ }
11
+ async loadData(model, params) {
12
+ const entriesResult = await this.listLatestEntries.execute(model, params);
13
+ return entriesResult.value;
14
+ }
15
+ async processData(model, params) {
16
+ if (!params.data?.folderId) {
17
+ throw new Error(`Missing "data.folderId" in the input.`);
18
+ }
19
+ const {
20
+ id: entryId
21
+ } = parseIdentifier(params.id);
22
+ await this.moveEntry.execute(model, entryId, params.data.folderId);
23
+ }
24
+ }
25
+ export const MoveToFolderBulkAction = EntriesBulkAction.createImplementation({
26
+ implementation: MoveToFolderBulkActionImpl,
27
+ dependencies: [ListLatestEntriesUseCase, MoveEntryUseCase]
28
+ });
29
+
30
+ //# sourceMappingURL=MoveToFolderBulkAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ListLatestEntriesUseCase","MoveEntryUseCase","parseIdentifier","EntriesBulkAction","MoveToFolderBulkActionImpl","name","constructor","listLatestEntries","moveEntry","loadData","model","params","entriesResult","execute","value","processData","data","folderId","Error","id","entryId","MoveToFolderBulkAction","createImplementation","implementation","dependencies"],"sources":["MoveToFolderBulkAction.ts"],"sourcesContent":["import { ListLatestEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries/index.js\";\nimport { MoveEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/MoveEntry/index.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { EntriesBulkAction } from \"~/features/EntriesBulkAction/abstractions.js\";\n\nclass MoveToFolderBulkActionImpl implements EntriesBulkAction.Interface {\n readonly name = \"moveToFolder\";\n\n constructor(\n private listLatestEntries: ListLatestEntriesUseCase.Interface,\n private moveEntry: MoveEntryUseCase.Interface\n ) {}\n\n async loadData(\n model: EntriesBulkAction.Model,\n params: EntriesBulkAction.LoadDataParams\n ): Promise<EntriesBulkAction.LoadDataResult> {\n const entriesResult = await this.listLatestEntries.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 if (!params.data?.folderId) {\n throw new Error(`Missing \"data.folderId\" in the input.`);\n }\n\n const { id: entryId } = parseIdentifier(params.id);\n\n await this.moveEntry.execute(model, entryId, params.data.folderId);\n }\n}\n\nexport const MoveToFolderBulkAction = EntriesBulkAction.createImplementation({\n implementation: MoveToFolderBulkActionImpl,\n dependencies: [ListLatestEntriesUseCase, MoveEntryUseCase]\n});\n"],"mappings":"AAAA,SAASA,wBAAwB,QAAQ,qEAAqE;AAC9G,SAASC,gBAAgB,QAAQ,mEAAmE;AACpG,SAASC,eAAe,QAAQ,eAAe;AAC/C,SAASC,iBAAiB;AAE1B,MAAMC,0BAA0B,CAAwC;EAC3DC,IAAI,GAAG,cAAc;EAE9BC,WAAWA,CACCC,iBAAqD,EACrDC,SAAqC,EAC/C;IAAA,KAFUD,iBAAqD,GAArDA,iBAAqD;IAAA,KACrDC,SAAqC,GAArCA,SAAqC;EAC9C;EAEH,MAAMC,QAAQA,CACVC,KAA8B,EAC9BC,MAAwC,EACC;IACzC,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACL,iBAAiB,CAACM,OAAO,CAACH,KAAK,EAAEC,MAAM,CAAC;IAEzE,OAAOC,aAAa,CAACE,KAAK;EAC9B;EAEA,MAAMC,WAAWA,CACbL,KAA8B,EAC9BC,MAAuC,EAC1B;IACb,IAAI,CAACA,MAAM,CAACK,IAAI,EAAEC,QAAQ,EAAE;MACxB,MAAM,IAAIC,KAAK,CAAC,uCAAuC,CAAC;IAC5D;IAEA,MAAM;MAAEC,EAAE,EAAEC;IAAQ,CAAC,GAAGlB,eAAe,CAACS,MAAM,CAACQ,EAAE,CAAC;IAElD,MAAM,IAAI,CAACX,SAAS,CAACK,OAAO,CAACH,KAAK,EAAEU,OAAO,EAAET,MAAM,CAACK,IAAI,CAACC,QAAQ,CAAC;EACtE;AACJ;AAEA,OAAO,MAAMI,sBAAsB,GAAGlB,iBAAiB,CAACmB,oBAAoB,CAAC;EACzEC,cAAc,EAAEnB,0BAA0B;EAC1CoB,YAAY,EAAE,CAACxB,wBAAwB,EAAEC,gBAAgB;AAC7D,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const MoveToFolderBulkActionFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
@@ -0,0 +1,10 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { MoveToFolderBulkAction } from "./MoveToFolderBulkAction.js";
3
+ export const MoveToFolderBulkActionFeature = createFeature({
4
+ name: "HeadlessCms/BulkAction/MoveToFolder",
5
+ register(container) {
6
+ container.register(MoveToFolderBulkAction);
7
+ }
8
+ });
9
+
10
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createFeature","MoveToFolderBulkAction","MoveToFolderBulkActionFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { MoveToFolderBulkAction } from \"./MoveToFolderBulkAction.js\";\n\nexport const MoveToFolderBulkActionFeature = createFeature({\n name: \"HeadlessCms/BulkAction/MoveToFolder\",\n register(container) {\n container.register(MoveToFolderBulkAction);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,sBAAsB;AAE/B,OAAO,MAAMC,6BAA6B,GAAGF,aAAa,CAAC;EACvDG,IAAI,EAAE,qCAAqC;EAC3CC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,sBAAsB,CAAC;EAC9C;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries/index.js";
2
+ import { DeleteEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/index.js";
3
+ import { EntriesBulkAction } from "../../features/EntriesBulkAction/abstractions.js";
4
+ declare class MoveToTrashBulkActionImpl implements EntriesBulkAction.Interface {
5
+ private listLatestEntries;
6
+ private deleteEntry;
7
+ readonly name = "moveToTrash";
8
+ constructor(listLatestEntries: ListLatestEntriesUseCase.Interface, deleteEntry: DeleteEntryUseCase.Interface);
9
+ loadData(model: EntriesBulkAction.Model, params: EntriesBulkAction.LoadDataParams): Promise<EntriesBulkAction.LoadDataResult>;
10
+ processData(model: EntriesBulkAction.Model, params: EntriesBulkAction.ProcessParams): Promise<void>;
11
+ }
12
+ export declare const MoveToTrashBulkAction: typeof MoveToTrashBulkActionImpl & {
13
+ __abstraction: import("@webiny/di").Abstraction<import("~/features/EntriesBulkAction/abstractions.js").IEntriesBulkAction>;
14
+ };
15
+ export {};
@@ -0,0 +1,29 @@
1
+ import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries/index.js";
2
+ import { DeleteEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/index.js";
3
+ import { parseIdentifier } from "@webiny/utils";
4
+ import { EntriesBulkAction } from "../EntriesBulkAction/abstractions.js";
5
+ class MoveToTrashBulkActionImpl {
6
+ name = "moveToTrash";
7
+ constructor(listLatestEntries, deleteEntry) {
8
+ this.listLatestEntries = listLatestEntries;
9
+ this.deleteEntry = deleteEntry;
10
+ }
11
+ async loadData(model, params) {
12
+ const entriesResult = await this.listLatestEntries.execute(model, params);
13
+ return entriesResult.value;
14
+ }
15
+ async processData(model, params) {
16
+ const {
17
+ id: entryId
18
+ } = parseIdentifier(params.id);
19
+ await this.deleteEntry.execute(model, entryId, {
20
+ permanently: false
21
+ });
22
+ }
23
+ }
24
+ export const MoveToTrashBulkAction = EntriesBulkAction.createImplementation({
25
+ implementation: MoveToTrashBulkActionImpl,
26
+ dependencies: [ListLatestEntriesUseCase, DeleteEntryUseCase]
27
+ });
28
+
29
+ //# sourceMappingURL=MoveToTrashBulkAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ListLatestEntriesUseCase","DeleteEntryUseCase","parseIdentifier","EntriesBulkAction","MoveToTrashBulkActionImpl","name","constructor","listLatestEntries","deleteEntry","loadData","model","params","entriesResult","execute","value","processData","id","entryId","permanently","MoveToTrashBulkAction","createImplementation","implementation","dependencies"],"sources":["MoveToTrashBulkAction.ts"],"sourcesContent":["import { ListLatestEntriesUseCase } 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 MoveToTrashBulkActionImpl implements EntriesBulkAction.Interface {\n readonly name = \"moveToTrash\";\n\n constructor(\n private listLatestEntries: ListLatestEntriesUseCase.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.listLatestEntries.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: false\n });\n }\n}\n\nexport const MoveToTrashBulkAction = EntriesBulkAction.createImplementation({\n implementation: MoveToTrashBulkActionImpl,\n dependencies: [ListLatestEntriesUseCase, DeleteEntryUseCase]\n});\n"],"mappings":"AAAA,SAASA,wBAAwB,QAAQ,qEAAqE;AAC9G,SAASC,kBAAkB,QAAQ,qEAAqE;AACxG,SAASC,eAAe,QAAQ,eAAe;AAC/C,SAASC,iBAAiB;AAE1B,MAAMC,yBAAyB,CAAwC;EAC1DC,IAAI,GAAG,aAAa;EAE7BC,WAAWA,CACCC,iBAAqD,EACrDC,WAAyC,EACnD;IAAA,KAFUD,iBAAqD,GAArDA,iBAAqD;IAAA,KACrDC,WAAyC,GAAzCA,WAAyC;EAClD;EAEH,MAAMC,QAAQA,CACVC,KAA8B,EAC9BC,MAAwC,EACC;IACzC,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACL,iBAAiB,CAACM,OAAO,CAACH,KAAK,EAAEC,MAAM,CAAC;IAEzE,OAAOC,aAAa,CAACE,KAAK;EAC9B;EAEA,MAAMC,WAAWA,CACbL,KAA8B,EAC9BC,MAAuC,EAC1B;IACb,MAAM;MAAEK,EAAE,EAAEC;IAAQ,CAAC,GAAGf,eAAe,CAACS,MAAM,CAACK,EAAE,CAAC;IAElD,MAAM,IAAI,CAACR,WAAW,CAACK,OAAO,CAACH,KAAK,EAAEO,OAAO,EAAE;MAC3CC,WAAW,EAAE;IACjB,CAAC,CAAC;EACN;AACJ;AAEA,OAAO,MAAMC,qBAAqB,GAAGhB,iBAAiB,CAACiB,oBAAoB,CAAC;EACxEC,cAAc,EAAEjB,yBAAyB;EACzCkB,YAAY,EAAE,CAACtB,wBAAwB,EAAEC,kBAAkB;AAC/D,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const MoveToTrashBulkActionFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
@@ -0,0 +1,10 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { MoveToTrashBulkAction } from "./MoveToTrashBulkAction.js";
3
+ export const MoveToTrashBulkActionFeature = createFeature({
4
+ name: "HeadlessCms/BulkAction/MoveToTrash",
5
+ register(container) {
6
+ container.register(MoveToTrashBulkAction);
7
+ }
8
+ });
9
+
10
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createFeature","MoveToTrashBulkAction","MoveToTrashBulkActionFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { MoveToTrashBulkAction } from \"./MoveToTrashBulkAction.js\";\n\nexport const MoveToTrashBulkActionFeature = createFeature({\n name: \"HeadlessCms/BulkAction/MoveToTrash\",\n register(container) {\n container.register(MoveToTrashBulkAction);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,qBAAqB;AAE9B,OAAO,MAAMC,4BAA4B,GAAGF,aAAa,CAAC;EACtDG,IAAI,EAAE,oCAAoC;EAC1CC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,qBAAqB,CAAC;EAC7C;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries/index.js";
2
+ import { PublishEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/PublishEntry/index.js";
3
+ import { EntriesBulkAction } from "../../features/EntriesBulkAction/abstractions.js";
4
+ declare class PublishEntriesBulkActionImpl implements EntriesBulkAction.Interface {
5
+ private listLatestEntries;
6
+ private publishEntry;
7
+ readonly name = "publish";
8
+ constructor(listLatestEntries: ListLatestEntriesUseCase.Interface, publishEntry: PublishEntryUseCase.Interface);
9
+ loadData(model: EntriesBulkAction.Model, params: EntriesBulkAction.LoadDataParams): Promise<EntriesBulkAction.LoadDataResult>;
10
+ processData(model: EntriesBulkAction.Model, params: EntriesBulkAction.ProcessParams): Promise<void>;
11
+ }
12
+ export declare const PublishEntriesBulkAction: typeof PublishEntriesBulkActionImpl & {
13
+ __abstraction: import("@webiny/di").Abstraction<import("~/features/EntriesBulkAction/abstractions.js").IEntriesBulkAction>;
14
+ };
15
+ export {};
@@ -0,0 +1,37 @@
1
+ import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries/index.js";
2
+ import { PublishEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/PublishEntry/index.js";
3
+ import { parseIdentifier } from "@webiny/utils";
4
+ import { EntriesBulkAction } from "../EntriesBulkAction/abstractions.js";
5
+ class PublishEntriesBulkActionImpl {
6
+ name = "publish";
7
+ constructor(listLatestEntries, publishEntry) {
8
+ this.listLatestEntries = listLatestEntries;
9
+ this.publishEntry = publishEntry;
10
+ }
11
+ async loadData(model, params) {
12
+ const {
13
+ where,
14
+ ...rest
15
+ } = params;
16
+ const entriesResult = await this.listLatestEntries.execute(model, {
17
+ ...rest,
18
+ where: {
19
+ ...where,
20
+ status_not: "published"
21
+ }
22
+ });
23
+ return entriesResult.value;
24
+ }
25
+ async processData(model, params) {
26
+ const {
27
+ id: entryId
28
+ } = parseIdentifier(params.id);
29
+ await this.publishEntry.execute(model, entryId);
30
+ }
31
+ }
32
+ export const PublishEntriesBulkAction = EntriesBulkAction.createImplementation({
33
+ implementation: PublishEntriesBulkActionImpl,
34
+ dependencies: [ListLatestEntriesUseCase, PublishEntryUseCase]
35
+ });
36
+
37
+ //# sourceMappingURL=PublishEntriesBulkAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ListLatestEntriesUseCase","PublishEntryUseCase","parseIdentifier","EntriesBulkAction","PublishEntriesBulkActionImpl","name","constructor","listLatestEntries","publishEntry","loadData","model","params","where","rest","entriesResult","execute","status_not","value","processData","id","entryId","PublishEntriesBulkAction","createImplementation","implementation","dependencies"],"sources":["PublishEntriesBulkAction.ts"],"sourcesContent":["import { ListLatestEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries/index.js\";\nimport { PublishEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/PublishEntry/index.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { EntriesBulkAction } from \"~/features/EntriesBulkAction/abstractions.js\";\n\nclass PublishEntriesBulkActionImpl implements EntriesBulkAction.Interface {\n readonly name = \"publish\";\n\n constructor(\n private listLatestEntries: ListLatestEntriesUseCase.Interface,\n private publishEntry: PublishEntryUseCase.Interface\n ) {}\n\n async loadData(\n model: EntriesBulkAction.Model,\n params: EntriesBulkAction.LoadDataParams\n ): Promise<EntriesBulkAction.LoadDataResult> {\n const { where, ...rest } = params;\n\n const entriesResult = await this.listLatestEntries.execute(model, {\n ...rest,\n where: {\n ...where,\n status_not: \"published\"\n }\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.publishEntry.execute(model, entryId);\n }\n}\n\nexport const PublishEntriesBulkAction = EntriesBulkAction.createImplementation({\n implementation: PublishEntriesBulkActionImpl,\n dependencies: [ListLatestEntriesUseCase, PublishEntryUseCase]\n});\n"],"mappings":"AAAA,SAASA,wBAAwB,QAAQ,qEAAqE;AAC9G,SAASC,mBAAmB,QAAQ,sEAAsE;AAC1G,SAASC,eAAe,QAAQ,eAAe;AAC/C,SAASC,iBAAiB;AAE1B,MAAMC,4BAA4B,CAAwC;EAC7DC,IAAI,GAAG,SAAS;EAEzBC,WAAWA,CACCC,iBAAqD,EACrDC,YAA2C,EACrD;IAAA,KAFUD,iBAAqD,GAArDA,iBAAqD;IAAA,KACrDC,YAA2C,GAA3CA,YAA2C;EACpD;EAEH,MAAMC,QAAQA,CACVC,KAA8B,EAC9BC,MAAwC,EACC;IACzC,MAAM;MAAEC,KAAK;MAAE,GAAGC;IAAK,CAAC,GAAGF,MAAM;IAEjC,MAAMG,aAAa,GAAG,MAAM,IAAI,CAACP,iBAAiB,CAACQ,OAAO,CAACL,KAAK,EAAE;MAC9D,GAAGG,IAAI;MACPD,KAAK,EAAE;QACH,GAAGA,KAAK;QACRI,UAAU,EAAE;MAChB;IACJ,CAAC,CAAC;IAEF,OAAOF,aAAa,CAACG,KAAK;EAC9B;EAEA,MAAMC,WAAWA,CACbR,KAA8B,EAC9BC,MAAuC,EAC1B;IACb,MAAM;MAAEQ,EAAE,EAAEC;IAAQ,CAAC,GAAGlB,eAAe,CAACS,MAAM,CAACQ,EAAE,CAAC;IAElD,MAAM,IAAI,CAACX,YAAY,CAACO,OAAO,CAACL,KAAK,EAAEU,OAAO,CAAC;EACnD;AACJ;AAEA,OAAO,MAAMC,wBAAwB,GAAGlB,iBAAiB,CAACmB,oBAAoB,CAAC;EAC3EC,cAAc,EAAEnB,4BAA4B;EAC5CoB,YAAY,EAAE,CAACxB,wBAAwB,EAAEC,mBAAmB;AAChE,CAAC,CAAC","ignoreList":[]}