@webiny/api-headless-cms-bulk-actions 0.0.0-unstable.e53eceafb5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +15 -0
- package/abstractions/IListEntries.d.ts +7 -0
- package/abstractions/IListEntries.js +7 -0
- package/abstractions/IListEntries.js.map +1 -0
- package/abstractions/IProcessEntry.d.ts +4 -0
- package/abstractions/IProcessEntry.js +7 -0
- package/abstractions/IProcessEntry.js.map +1 -0
- package/abstractions/IUseCase.d.ts +3 -0
- package/abstractions/IUseCase.js +7 -0
- package/abstractions/IUseCase.js.map +1 -0
- package/abstractions/index.d.ts +3 -0
- package/abstractions/index.js +40 -0
- package/abstractions/index.js.map +1 -0
- package/handlers/eventBridgeEventHandler.d.ts +1 -0
- package/handlers/eventBridgeEventHandler.js +53 -0
- package/handlers/eventBridgeEventHandler.js.map +1 -0
- package/handlers/index.d.ts +1 -0
- package/handlers/index.js +14 -0
- package/handlers/index.js.map +1 -0
- package/handlers/setupEventsTenant.d.ts +1 -0
- package/handlers/setupEventsTenant.js +19 -0
- package/handlers/setupEventsTenant.js.map +1 -0
- package/index.d.ts +6 -0
- package/index.js +73 -0
- package/index.js.map +1 -0
- package/package.json +45 -0
- package/plugins/createBulkAction.d.ts +10 -0
- package/plugins/createBulkAction.js +36 -0
- package/plugins/createBulkAction.js.map +1 -0
- package/plugins/createBulkActionGraphQL.d.ts +7 -0
- package/plugins/createBulkActionGraphQL.js +72 -0
- package/plugins/createBulkActionGraphQL.js.map +1 -0
- package/plugins/createBulkActionTasks.d.ts +9 -0
- package/plugins/createBulkActionTasks.js +135 -0
- package/plugins/createBulkActionTasks.js.map +1 -0
- package/plugins/createDefaultGraphQL.d.ts +3 -0
- package/plugins/createDefaultGraphQL.js +70 -0
- package/plugins/createDefaultGraphQL.js.map +1 -0
- package/plugins/index.d.ts +2 -0
- package/plugins/index.js +29 -0
- package/plugins/index.js.map +1 -0
- package/tasks/createBulkActionEntriesTasks.d.ts +1 -0
- package/tasks/createBulkActionEntriesTasks.js +38 -0
- package/tasks/createBulkActionEntriesTasks.js.map +1 -0
- package/tasks/createEmptyTrashBinsTask.d.ts +2 -0
- package/tasks/createEmptyTrashBinsTask.js +118 -0
- package/tasks/createEmptyTrashBinsTask.js.map +1 -0
- package/tasks/index.d.ts +2 -0
- package/tasks/index.js +29 -0
- package/tasks/index.js.map +1 -0
- package/types.d.ts +53 -0
- package/types.js +24 -0
- package/types.js.map +1 -0
- package/useCases/DeleteEntry.d.ts +10 -0
- package/useCases/DeleteEntry.js +26 -0
- package/useCases/DeleteEntry.js.map +1 -0
- package/useCases/ListDeletedEntries.d.ts +13 -0
- package/useCases/ListDeletedEntries.js +28 -0
- package/useCases/ListDeletedEntries.js.map +1 -0
- package/useCases/ListLatestEntries.d.ts +13 -0
- package/useCases/ListLatestEntries.js +28 -0
- package/useCases/ListLatestEntries.js.map +1 -0
- package/useCases/ListNotPublishedEntries.d.ts +13 -0
- package/useCases/ListNotPublishedEntries.js +34 -0
- package/useCases/ListNotPublishedEntries.js.map +1 -0
- package/useCases/ListPublishedEntries.d.ts +13 -0
- package/useCases/ListPublishedEntries.js +28 -0
- package/useCases/ListPublishedEntries.js.map +1 -0
- package/useCases/MoveEntryToFolder.d.ts +13 -0
- package/useCases/MoveEntryToFolder.js +23 -0
- package/useCases/MoveEntryToFolder.js.map +1 -0
- package/useCases/MoveEntryToTrash.d.ts +10 -0
- package/useCases/MoveEntryToTrash.js +26 -0
- package/useCases/MoveEntryToTrash.js.map +1 -0
- package/useCases/PublishEntry.d.ts +10 -0
- package/useCases/PublishEntry.js +20 -0
- package/useCases/PublishEntry.js.map +1 -0
- package/useCases/RestoreEntryFromTrash.d.ts +10 -0
- package/useCases/RestoreEntryFromTrash.js +24 -0
- package/useCases/RestoreEntryFromTrash.js.map +1 -0
- package/useCases/UnpublishEntry.d.ts +10 -0
- package/useCases/UnpublishEntry.js +20 -0
- package/useCases/UnpublishEntry.js.map +1 -0
- package/useCases/index.d.ts +10 -0
- package/useCases/index.js +117 -0
- package/useCases/index.js.map +1 -0
- package/useCases/internals/ChildTaskCleanup/ChildTasksCleanup.d.ts +17 -0
- package/useCases/internals/ChildTaskCleanup/ChildTasksCleanup.js +77 -0
- package/useCases/internals/ChildTaskCleanup/ChildTasksCleanup.js.map +1 -0
- package/useCases/internals/ChildTaskCleanup/index.d.ts +1 -0
- package/useCases/internals/ChildTaskCleanup/index.js +18 -0
- package/useCases/internals/ChildTaskCleanup/index.js.map +1 -0
- package/useCases/internals/CreateTasksByModel/CreateTasksByModel.d.ts +13 -0
- package/useCases/internals/CreateTasksByModel/CreateTasksByModel.js +111 -0
- package/useCases/internals/CreateTasksByModel/CreateTasksByModel.js.map +1 -0
- package/useCases/internals/CreateTasksByModel/TaskCache.d.ts +36 -0
- package/useCases/internals/CreateTasksByModel/TaskCache.js +76 -0
- package/useCases/internals/CreateTasksByModel/TaskCache.js.map +1 -0
- package/useCases/internals/CreateTasksByModel/index.d.ts +1 -0
- package/useCases/internals/CreateTasksByModel/index.js +18 -0
- package/useCases/internals/CreateTasksByModel/index.js.map +1 -0
- package/useCases/internals/ProcessTask/ProcessTask.d.ts +14 -0
- package/useCases/internals/ProcessTask/ProcessTask.js +81 -0
- package/useCases/internals/ProcessTask/ProcessTask.js.map +1 -0
- package/useCases/internals/ProcessTask/Result.d.ts +9 -0
- package/useCases/internals/ProcessTask/Result.js +29 -0
- package/useCases/internals/ProcessTask/Result.js.map +1 -0
- package/useCases/internals/ProcessTask/index.d.ts +1 -0
- package/useCases/internals/ProcessTask/index.js +18 -0
- package/useCases/internals/ProcessTask/index.js.map +1 -0
- package/useCases/internals/ProcessTasksByModel/ProcessTasksByModel.d.ts +11 -0
- package/useCases/internals/ProcessTasksByModel/ProcessTasksByModel.js +67 -0
- package/useCases/internals/ProcessTasksByModel/ProcessTasksByModel.js.map +1 -0
- package/useCases/internals/ProcessTasksByModel/index.d.ts +1 -0
- package/useCases/internals/ProcessTasksByModel/index.js +18 -0
- package/useCases/internals/ProcessTasksByModel/index.js.map +1 -0
- package/useCases/internals/index.d.ts +4 -0
- package/useCases/internals/index.js +51 -0
- package/useCases/internals/index.js.map +1 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createBulkActionTasks = void 0;
|
|
7
|
+
var _tasks = require("@webiny/tasks");
|
|
8
|
+
var _internals = require("../useCases/internals");
|
|
9
|
+
var _types = require("../types");
|
|
10
|
+
const BATCH_SIZE = 100; // Default number of entries to fetch in each batch
|
|
11
|
+
|
|
12
|
+
class BulkActionTasks {
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.name = config.name;
|
|
15
|
+
this.dataLoader = config.dataLoader;
|
|
16
|
+
this.dataProcessor = config.dataProcessor;
|
|
17
|
+
this.batchSize = config.batchSize || BATCH_SIZE;
|
|
18
|
+
}
|
|
19
|
+
createListTaskDefinition() {
|
|
20
|
+
return (0, _tasks.createPrivateTaskDefinition)({
|
|
21
|
+
id: this.createListTaskDefinitionName(),
|
|
22
|
+
title: `Headless CMS: list "${this.name}" entries by model`,
|
|
23
|
+
maxIterations: 500,
|
|
24
|
+
disableDatabaseLogs: true,
|
|
25
|
+
run: async params => {
|
|
26
|
+
const {
|
|
27
|
+
response,
|
|
28
|
+
input,
|
|
29
|
+
context
|
|
30
|
+
} = params;
|
|
31
|
+
try {
|
|
32
|
+
if (!input.modelId) {
|
|
33
|
+
return response.error(`Missing "modelId" in the input.`);
|
|
34
|
+
}
|
|
35
|
+
const action = this.getCurrentAction(input);
|
|
36
|
+
switch (action) {
|
|
37
|
+
case _types.BulkActionOperationByModelAction.PROCESS_SUBTASKS:
|
|
38
|
+
{
|
|
39
|
+
const processTasks = new _internals.ProcessTasksByModel(this.createProcessTaskDefinitionName());
|
|
40
|
+
return await processTasks.execute(params);
|
|
41
|
+
}
|
|
42
|
+
case _types.BulkActionOperationByModelAction.CREATE_SUBTASKS:
|
|
43
|
+
case _types.BulkActionOperationByModelAction.CHECK_MORE_SUBTASKS:
|
|
44
|
+
{
|
|
45
|
+
const createTasks = new _internals.CreateTasksByModel(this.createProcessTaskDefinitionName(), this.dataLoader(context), this.batchSize);
|
|
46
|
+
return await createTasks.execute(params);
|
|
47
|
+
}
|
|
48
|
+
case _types.BulkActionOperationByModelAction.END_TASK:
|
|
49
|
+
{
|
|
50
|
+
return response.done(`Task done: task "${this.createProcessTaskDefinitionName()}" has been successfully processed for entries from "${input.modelId}" model.`);
|
|
51
|
+
}
|
|
52
|
+
default:
|
|
53
|
+
return response.error(`Unknown action: ${action}`);
|
|
54
|
+
}
|
|
55
|
+
} catch (ex) {
|
|
56
|
+
return response.error(ex.message ?? "Error while executing list task");
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
onDone: async ({
|
|
60
|
+
context,
|
|
61
|
+
task
|
|
62
|
+
}) => {
|
|
63
|
+
await this.onCreateListTaskDefinitionFinish(context, task, "done");
|
|
64
|
+
},
|
|
65
|
+
onError: async ({
|
|
66
|
+
context,
|
|
67
|
+
task
|
|
68
|
+
}) => {
|
|
69
|
+
await this.onCreateListTaskDefinitionFinish(context, task, "error");
|
|
70
|
+
},
|
|
71
|
+
onAbort: async ({
|
|
72
|
+
context,
|
|
73
|
+
task
|
|
74
|
+
}) => {
|
|
75
|
+
await this.onCreateListTaskDefinitionFinish(context, task, "abort");
|
|
76
|
+
},
|
|
77
|
+
onMaxIterations: async ({
|
|
78
|
+
context,
|
|
79
|
+
task
|
|
80
|
+
}) => {
|
|
81
|
+
await this.onCreateListTaskDefinitionFinish(context, task, "maxIterations");
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
createProcessTaskDefinition() {
|
|
86
|
+
return (0, _tasks.createPrivateTaskDefinition)({
|
|
87
|
+
id: this.createProcessTaskDefinitionName(),
|
|
88
|
+
title: `Headless CMS: process "${this.name}" entries`,
|
|
89
|
+
maxIterations: 2,
|
|
90
|
+
disableDatabaseLogs: true,
|
|
91
|
+
run: async params => {
|
|
92
|
+
const {
|
|
93
|
+
response,
|
|
94
|
+
context
|
|
95
|
+
} = params;
|
|
96
|
+
try {
|
|
97
|
+
const processTask = new _internals.ProcessTask(this.dataProcessor(context));
|
|
98
|
+
return await processTask.execute(params);
|
|
99
|
+
} catch (ex) {
|
|
100
|
+
return response.error(ex.message ?? "Error while executing process task");
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
createListTaskDefinitionName() {
|
|
106
|
+
return `hcmsBulkList${this.name}Entries`;
|
|
107
|
+
}
|
|
108
|
+
createProcessTaskDefinitionName() {
|
|
109
|
+
return `hcmsBulkProcess${this.name}Entries`;
|
|
110
|
+
}
|
|
111
|
+
getCurrentAction(input) {
|
|
112
|
+
return input.action ?? _types.BulkActionOperationByModelAction.CREATE_SUBTASKS;
|
|
113
|
+
}
|
|
114
|
+
async onCreateListTaskDefinitionFinish(context, task, cause) {
|
|
115
|
+
/**
|
|
116
|
+
* We want to clean all child tasks and logs, which have no errors.
|
|
117
|
+
*/
|
|
118
|
+
const childTasksCleanup = new _internals.ChildTasksCleanup();
|
|
119
|
+
try {
|
|
120
|
+
await childTasksCleanup.execute({
|
|
121
|
+
context,
|
|
122
|
+
task
|
|
123
|
+
});
|
|
124
|
+
} catch (ex) {
|
|
125
|
+
console.error(`Error while cleaning "${this.createListTaskDefinitionName()} child tasks - ${cause}."`, ex);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const createBulkActionTasks = config => {
|
|
130
|
+
const backgroundTasks = new BulkActionTasks(config);
|
|
131
|
+
return [backgroundTasks.createListTaskDefinition(), backgroundTasks.createProcessTaskDefinition()];
|
|
132
|
+
};
|
|
133
|
+
exports.createBulkActionTasks = createBulkActionTasks;
|
|
134
|
+
|
|
135
|
+
//# sourceMappingURL=createBulkActionTasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_tasks","require","_internals","_types","BATCH_SIZE","BulkActionTasks","constructor","config","name","dataLoader","dataProcessor","batchSize","createListTaskDefinition","createPrivateTaskDefinition","id","createListTaskDefinitionName","title","maxIterations","disableDatabaseLogs","run","params","response","input","context","modelId","error","action","getCurrentAction","BulkActionOperationByModelAction","PROCESS_SUBTASKS","processTasks","ProcessTasksByModel","createProcessTaskDefinitionName","execute","CREATE_SUBTASKS","CHECK_MORE_SUBTASKS","createTasks","CreateTasksByModel","END_TASK","done","ex","message","onDone","task","onCreateListTaskDefinitionFinish","onError","onAbort","onMaxIterations","createProcessTaskDefinition","processTask","ProcessTask","cause","childTasksCleanup","ChildTasksCleanup","console","createBulkActionTasks","backgroundTasks","exports"],"sources":["createBulkActionTasks.ts"],"sourcesContent":["import type { ITask } from \"@webiny/tasks\";\nimport { createPrivateTaskDefinition } from \"@webiny/tasks\";\nimport type { IListEntries, IProcessEntry } from \"~/abstractions\";\nimport {\n ChildTasksCleanup,\n CreateTasksByModel,\n ProcessTask,\n ProcessTasksByModel\n} from \"~/useCases/internals\";\nimport type {\n HcmsBulkActionsContext,\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput,\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n} from \"~/types\";\nimport { BulkActionOperationByModelAction } from \"~/types\";\n\nexport interface CreateBackgroundTasksConfig {\n name: string;\n dataLoader: (context: HcmsBulkActionsContext) => IListEntries;\n dataProcessor: (context: HcmsBulkActionsContext) => IProcessEntry;\n batchSize?: number;\n}\n\nconst BATCH_SIZE = 100; // Default number of entries to fetch in each batch\n\nclass BulkActionTasks {\n private readonly name: string;\n private readonly dataLoader: (context: HcmsBulkActionsContext) => IListEntries;\n private readonly dataProcessor: (context: HcmsBulkActionsContext) => IProcessEntry;\n private readonly batchSize: number;\n\n constructor(config: CreateBackgroundTasksConfig) {\n this.name = config.name;\n this.dataLoader = config.dataLoader;\n this.dataProcessor = config.dataProcessor;\n this.batchSize = config.batchSize || BATCH_SIZE;\n }\n\n public createListTaskDefinition() {\n return createPrivateTaskDefinition<\n HcmsBulkActionsContext,\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput\n >({\n id: this.createListTaskDefinitionName(),\n title: `Headless CMS: list \"${this.name}\" entries by model`,\n maxIterations: 500,\n disableDatabaseLogs: true,\n run: async params => {\n const { response, input, context } = params;\n\n try {\n if (!input.modelId) {\n return response.error(`Missing \"modelId\" in the input.`);\n }\n\n const action = this.getCurrentAction(input);\n\n switch (action) {\n case BulkActionOperationByModelAction.PROCESS_SUBTASKS: {\n const processTasks = new ProcessTasksByModel(\n this.createProcessTaskDefinitionName()\n );\n return await processTasks.execute(params);\n }\n case BulkActionOperationByModelAction.CREATE_SUBTASKS:\n case BulkActionOperationByModelAction.CHECK_MORE_SUBTASKS: {\n const createTasks = new CreateTasksByModel(\n this.createProcessTaskDefinitionName(),\n this.dataLoader(context),\n this.batchSize\n );\n return await createTasks.execute(params);\n }\n case BulkActionOperationByModelAction.END_TASK: {\n return response.done(\n `Task done: task \"${this.createProcessTaskDefinitionName()}\" has been successfully processed for entries from \"${\n input.modelId\n }\" model.`\n );\n }\n default:\n return response.error(`Unknown action: ${action}`);\n }\n } catch (ex) {\n return response.error(ex.message ?? \"Error while executing list task\");\n }\n },\n onDone: async ({ context, task }) => {\n await this.onCreateListTaskDefinitionFinish(context, task, \"done\");\n },\n onError: async ({ context, task }) => {\n await this.onCreateListTaskDefinitionFinish(context, task, \"error\");\n },\n onAbort: async ({ context, task }) => {\n await this.onCreateListTaskDefinitionFinish(context, task, \"abort\");\n },\n onMaxIterations: async ({ context, task }) => {\n await this.onCreateListTaskDefinitionFinish(context, task, \"maxIterations\");\n }\n });\n }\n\n public createProcessTaskDefinition() {\n return createPrivateTaskDefinition<\n HcmsBulkActionsContext,\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n >({\n id: this.createProcessTaskDefinitionName(),\n title: `Headless CMS: process \"${this.name}\" entries`,\n maxIterations: 2,\n disableDatabaseLogs: true,\n run: async params => {\n const { response, context } = params;\n\n try {\n const processTask = new ProcessTask(this.dataProcessor(context));\n return await processTask.execute(params);\n } catch (ex) {\n return response.error(ex.message ?? \"Error while executing process task\");\n }\n }\n });\n }\n\n private createListTaskDefinitionName() {\n return `hcmsBulkList${this.name}Entries`;\n }\n\n private createProcessTaskDefinitionName() {\n return `hcmsBulkProcess${this.name}Entries`;\n }\n\n private getCurrentAction(input: IBulkActionOperationByModelInput) {\n return input.action ?? BulkActionOperationByModelAction.CREATE_SUBTASKS;\n }\n\n private async onCreateListTaskDefinitionFinish(\n context: HcmsBulkActionsContext,\n task: ITask,\n cause: string\n ) {\n /**\n * We want to clean all child tasks and logs, which have no errors.\n */\n const childTasksCleanup = new ChildTasksCleanup();\n try {\n await childTasksCleanup.execute({\n context,\n task\n });\n } catch (ex) {\n console.error(\n `Error while cleaning \"${this.createListTaskDefinitionName()} child tasks - ${cause}.\"`,\n ex\n );\n }\n }\n}\n\nexport const createBulkActionTasks = (config: CreateBackgroundTasksConfig) => {\n const backgroundTasks = new BulkActionTasks(config);\n\n return [\n backgroundTasks.createListTaskDefinition(),\n backgroundTasks.createProcessTaskDefinition()\n ];\n};\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AAaA,IAAAE,MAAA,GAAAF,OAAA;AASA,MAAMG,UAAU,GAAG,GAAG,CAAC,CAAC;;AAExB,MAAMC,eAAe,CAAC;EAMlBC,WAAWA,CAACC,MAAmC,EAAE;IAC7C,IAAI,CAACC,IAAI,GAAGD,MAAM,CAACC,IAAI;IACvB,IAAI,CAACC,UAAU,GAAGF,MAAM,CAACE,UAAU;IACnC,IAAI,CAACC,aAAa,GAAGH,MAAM,CAACG,aAAa;IACzC,IAAI,CAACC,SAAS,GAAGJ,MAAM,CAACI,SAAS,IAAIP,UAAU;EACnD;EAEOQ,wBAAwBA,CAAA,EAAG;IAC9B,OAAO,IAAAC,kCAA2B,EAIhC;MACEC,EAAE,EAAE,IAAI,CAACC,4BAA4B,CAAC,CAAC;MACvCC,KAAK,EAAE,uBAAuB,IAAI,CAACR,IAAI,oBAAoB;MAC3DS,aAAa,EAAE,GAAG;MAClBC,mBAAmB,EAAE,IAAI;MACzBC,GAAG,EAAE,MAAMC,MAAM,IAAI;QACjB,MAAM;UAAEC,QAAQ;UAAEC,KAAK;UAAEC;QAAQ,CAAC,GAAGH,MAAM;QAE3C,IAAI;UACA,IAAI,CAACE,KAAK,CAACE,OAAO,EAAE;YAChB,OAAOH,QAAQ,CAACI,KAAK,CAAC,iCAAiC,CAAC;UAC5D;UAEA,MAAMC,MAAM,GAAG,IAAI,CAACC,gBAAgB,CAACL,KAAK,CAAC;UAE3C,QAAQI,MAAM;YACV,KAAKE,uCAAgC,CAACC,gBAAgB;cAAE;gBACpD,MAAMC,YAAY,GAAG,IAAIC,8BAAmB,CACxC,IAAI,CAACC,+BAA+B,CAAC,CACzC,CAAC;gBACD,OAAO,MAAMF,YAAY,CAACG,OAAO,CAACb,MAAM,CAAC;cAC7C;YACA,KAAKQ,uCAAgC,CAACM,eAAe;YACrD,KAAKN,uCAAgC,CAACO,mBAAmB;cAAE;gBACvD,MAAMC,WAAW,GAAG,IAAIC,6BAAkB,CACtC,IAAI,CAACL,+BAA+B,CAAC,CAAC,EACtC,IAAI,CAACvB,UAAU,CAACc,OAAO,CAAC,EACxB,IAAI,CAACZ,SACT,CAAC;gBACD,OAAO,MAAMyB,WAAW,CAACH,OAAO,CAACb,MAAM,CAAC;cAC5C;YACA,KAAKQ,uCAAgC,CAACU,QAAQ;cAAE;gBAC5C,OAAOjB,QAAQ,CAACkB,IAAI,CAChB,oBAAoB,IAAI,CAACP,+BAA+B,CAAC,CAAC,uDACtDV,KAAK,CAACE,OAAO,UAErB,CAAC;cACL;YACA;cACI,OAAOH,QAAQ,CAACI,KAAK,CAAC,mBAAmBC,MAAM,EAAE,CAAC;UAC1D;QACJ,CAAC,CAAC,OAAOc,EAAE,EAAE;UACT,OAAOnB,QAAQ,CAACI,KAAK,CAACe,EAAE,CAACC,OAAO,IAAI,iCAAiC,CAAC;QAC1E;MACJ,CAAC;MACDC,MAAM,EAAE,MAAAA,CAAO;QAAEnB,OAAO;QAAEoB;MAAK,CAAC,KAAK;QACjC,MAAM,IAAI,CAACC,gCAAgC,CAACrB,OAAO,EAAEoB,IAAI,EAAE,MAAM,CAAC;MACtE,CAAC;MACDE,OAAO,EAAE,MAAAA,CAAO;QAAEtB,OAAO;QAAEoB;MAAK,CAAC,KAAK;QAClC,MAAM,IAAI,CAACC,gCAAgC,CAACrB,OAAO,EAAEoB,IAAI,EAAE,OAAO,CAAC;MACvE,CAAC;MACDG,OAAO,EAAE,MAAAA,CAAO;QAAEvB,OAAO;QAAEoB;MAAK,CAAC,KAAK;QAClC,MAAM,IAAI,CAACC,gCAAgC,CAACrB,OAAO,EAAEoB,IAAI,EAAE,OAAO,CAAC;MACvE,CAAC;MACDI,eAAe,EAAE,MAAAA,CAAO;QAAExB,OAAO;QAAEoB;MAAK,CAAC,KAAK;QAC1C,MAAM,IAAI,CAACC,gCAAgC,CAACrB,OAAO,EAAEoB,IAAI,EAAE,eAAe,CAAC;MAC/E;IACJ,CAAC,CAAC;EACN;EAEOK,2BAA2BA,CAAA,EAAG;IACjC,OAAO,IAAAnC,kCAA2B,EAIhC;MACEC,EAAE,EAAE,IAAI,CAACkB,+BAA+B,CAAC,CAAC;MAC1ChB,KAAK,EAAE,0BAA0B,IAAI,CAACR,IAAI,WAAW;MACrDS,aAAa,EAAE,CAAC;MAChBC,mBAAmB,EAAE,IAAI;MACzBC,GAAG,EAAE,MAAMC,MAAM,IAAI;QACjB,MAAM;UAAEC,QAAQ;UAAEE;QAAQ,CAAC,GAAGH,MAAM;QAEpC,IAAI;UACA,MAAM6B,WAAW,GAAG,IAAIC,sBAAW,CAAC,IAAI,CAACxC,aAAa,CAACa,OAAO,CAAC,CAAC;UAChE,OAAO,MAAM0B,WAAW,CAAChB,OAAO,CAACb,MAAM,CAAC;QAC5C,CAAC,CAAC,OAAOoB,EAAE,EAAE;UACT,OAAOnB,QAAQ,CAACI,KAAK,CAACe,EAAE,CAACC,OAAO,IAAI,oCAAoC,CAAC;QAC7E;MACJ;IACJ,CAAC,CAAC;EACN;EAEQ1B,4BAA4BA,CAAA,EAAG;IACnC,OAAO,eAAe,IAAI,CAACP,IAAI,SAAS;EAC5C;EAEQwB,+BAA+BA,CAAA,EAAG;IACtC,OAAO,kBAAkB,IAAI,CAACxB,IAAI,SAAS;EAC/C;EAEQmB,gBAAgBA,CAACL,KAAuC,EAAE;IAC9D,OAAOA,KAAK,CAACI,MAAM,IAAIE,uCAAgC,CAACM,eAAe;EAC3E;EAEA,MAAcU,gCAAgCA,CAC1CrB,OAA+B,EAC/BoB,IAAW,EACXQ,KAAa,EACf;IACE;AACR;AACA;IACQ,MAAMC,iBAAiB,GAAG,IAAIC,4BAAiB,CAAC,CAAC;IACjD,IAAI;MACA,MAAMD,iBAAiB,CAACnB,OAAO,CAAC;QAC5BV,OAAO;QACPoB;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOH,EAAE,EAAE;MACTc,OAAO,CAAC7B,KAAK,CACT,yBAAyB,IAAI,CAACV,4BAA4B,CAAC,CAAC,kBAAkBoC,KAAK,IAAI,EACvFX,EACJ,CAAC;IACL;EACJ;AACJ;AAEO,MAAMe,qBAAqB,GAAIhD,MAAmC,IAAK;EAC1E,MAAMiD,eAAe,GAAG,IAAInD,eAAe,CAACE,MAAM,CAAC;EAEnD,OAAO,CACHiD,eAAe,CAAC5C,wBAAwB,CAAC,CAAC,EAC1C4C,eAAe,CAACR,2BAA2B,CAAC,CAAC,CAChD;AACL,CAAC;AAACS,OAAA,CAAAF,qBAAA,GAAAA,qBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createDefaultGraphQL = void 0;
|
|
7
|
+
var _api = require("@webiny/api");
|
|
8
|
+
var _apiHeadlessCms = require("@webiny/api-headless-cms");
|
|
9
|
+
var _constants = require("@webiny/api-headless-cms/constants");
|
|
10
|
+
const createDefaultGraphQL = () => {
|
|
11
|
+
return new _api.ContextPlugin(async context => {
|
|
12
|
+
const tenant = context.tenancy.getCurrentTenant();
|
|
13
|
+
const locale = context.i18n.getContentLocale();
|
|
14
|
+
if (!locale || !(await (0, _apiHeadlessCms.isHeadlessCmsReady)(context))) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const defaultPlugin = new _apiHeadlessCms.CmsGraphQLSchemaPlugin({
|
|
18
|
+
typeDefs: /* GraphQL */`
|
|
19
|
+
type BulkActionResponseData {
|
|
20
|
+
id: String
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
type BulkActionResponse {
|
|
24
|
+
data: BulkActionResponseData
|
|
25
|
+
error: CmsError
|
|
26
|
+
}
|
|
27
|
+
`
|
|
28
|
+
});
|
|
29
|
+
defaultPlugin.name = `headless-cms.graphql.schema.bulkAction.default`;
|
|
30
|
+
const models = await context.security.withoutAuthorization(async () => {
|
|
31
|
+
const allModels = await context.cms.listModels();
|
|
32
|
+
return allModels.filter(model => {
|
|
33
|
+
if (model.isPrivate) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
const tags = Array.isArray(model.tags) ? model.tags : [];
|
|
37
|
+
if (tags.includes(_constants.CMS_MODEL_SINGLETON_TAG)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
const modelPlugins = [];
|
|
44
|
+
models.forEach(model => {
|
|
45
|
+
const plugin = new _apiHeadlessCms.CmsGraphQLSchemaPlugin({
|
|
46
|
+
typeDefs: /* GraphQL */`
|
|
47
|
+
enum BulkAction${model.singularApiName}Name {
|
|
48
|
+
_empty
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
extend type Mutation {
|
|
52
|
+
bulkAction${model.singularApiName}(
|
|
53
|
+
action: BulkAction${model.singularApiName}Name!
|
|
54
|
+
where: ${model.singularApiName}ListWhereInput
|
|
55
|
+
search: String
|
|
56
|
+
data: JSON
|
|
57
|
+
): BulkActionResponse
|
|
58
|
+
}
|
|
59
|
+
`,
|
|
60
|
+
isApplicable: context => context.tenancy.getCurrentTenant().id === tenant.id && context.i18n.getContentLocale()?.code === locale.code
|
|
61
|
+
});
|
|
62
|
+
plugin.name = `headless-cms.graphql.schema.bulkAction.default.${model.modelId}`;
|
|
63
|
+
modelPlugins.push(plugin);
|
|
64
|
+
});
|
|
65
|
+
context.plugins.register([defaultPlugin, ...modelPlugins]);
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
exports.createDefaultGraphQL = createDefaultGraphQL;
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=createDefaultGraphQL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_api","require","_apiHeadlessCms","_constants","createDefaultGraphQL","ContextPlugin","context","tenant","tenancy","getCurrentTenant","locale","i18n","getContentLocale","isHeadlessCmsReady","defaultPlugin","CmsGraphQLSchemaPlugin","typeDefs","name","models","security","withoutAuthorization","allModels","cms","listModels","filter","model","isPrivate","tags","Array","isArray","includes","CMS_MODEL_SINGLETON_TAG","modelPlugins","forEach","plugin","singularApiName","isApplicable","id","code","modelId","push","plugins","register","exports"],"sources":["createDefaultGraphQL.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport type { HcmsBulkActionsContext } from \"~/types\";\nimport { CmsGraphQLSchemaPlugin, isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"@webiny/api-headless-cms/constants\";\n\nexport const createDefaultGraphQL = () => {\n return new ContextPlugin<HcmsBulkActionsContext>(async context => {\n const tenant = context.tenancy.getCurrentTenant();\n const locale = context.i18n.getContentLocale();\n\n if (!locale || !(await isHeadlessCmsReady(context))) {\n return;\n }\n\n const defaultPlugin = new CmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type BulkActionResponseData {\n id: String\n }\n\n type BulkActionResponse {\n data: BulkActionResponseData\n error: CmsError\n }\n `\n });\n defaultPlugin.name = `headless-cms.graphql.schema.bulkAction.default`;\n\n const models = await context.security.withoutAuthorization(async () => {\n const allModels = await context.cms.listModels();\n return allModels.filter(model => {\n if (model.isPrivate) {\n return false;\n }\n const tags = Array.isArray(model.tags) ? model.tags : [];\n if (tags.includes(CMS_MODEL_SINGLETON_TAG)) {\n return false;\n }\n return true;\n });\n });\n\n const modelPlugins: CmsGraphQLSchemaPlugin<HcmsBulkActionsContext>[] = [];\n\n models.forEach(model => {\n const plugin = new CmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n enum BulkAction${model.singularApiName}Name {\n _empty\n }\n \n extend type Mutation {\n bulkAction${model.singularApiName}(\n action: BulkAction${model.singularApiName}Name!\n where: ${model.singularApiName}ListWhereInput\n search: String\n data: JSON\n ): BulkActionResponse\n }\n `,\n isApplicable: context =>\n context.tenancy.getCurrentTenant().id === tenant.id &&\n context.i18n.getContentLocale()?.code === locale.code\n });\n\n plugin.name = `headless-cms.graphql.schema.bulkAction.default.${model.modelId}`;\n modelPlugins.push(plugin);\n });\n\n context.plugins.register([defaultPlugin, ...modelPlugins]);\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEO,MAAMG,oBAAoB,GAAGA,CAAA,KAAM;EACtC,OAAO,IAAIC,kBAAa,CAAyB,MAAMC,OAAO,IAAI;IAC9D,MAAMC,MAAM,GAAGD,OAAO,CAACE,OAAO,CAACC,gBAAgB,CAAC,CAAC;IACjD,MAAMC,MAAM,GAAGJ,OAAO,CAACK,IAAI,CAACC,gBAAgB,CAAC,CAAC;IAE9C,IAAI,CAACF,MAAM,IAAI,EAAE,MAAM,IAAAG,kCAAkB,EAACP,OAAO,CAAC,CAAC,EAAE;MACjD;IACJ;IAEA,MAAMQ,aAAa,GAAG,IAAIC,sCAAsB,CAAC;MAC7CC,QAAQ,EAAE,aAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,CAAC,CAAC;IACFF,aAAa,CAACG,IAAI,GAAG,gDAAgD;IAErE,MAAMC,MAAM,GAAG,MAAMZ,OAAO,CAACa,QAAQ,CAACC,oBAAoB,CAAC,YAAY;MACnE,MAAMC,SAAS,GAAG,MAAMf,OAAO,CAACgB,GAAG,CAACC,UAAU,CAAC,CAAC;MAChD,OAAOF,SAAS,CAACG,MAAM,CAACC,KAAK,IAAI;QAC7B,IAAIA,KAAK,CAACC,SAAS,EAAE;UACjB,OAAO,KAAK;QAChB;QACA,MAAMC,IAAI,GAAGC,KAAK,CAACC,OAAO,CAACJ,KAAK,CAACE,IAAI,CAAC,GAAGF,KAAK,CAACE,IAAI,GAAG,EAAE;QACxD,IAAIA,IAAI,CAACG,QAAQ,CAACC,kCAAuB,CAAC,EAAE;UACxC,OAAO,KAAK;QAChB;QACA,OAAO,IAAI;MACf,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,MAAMC,YAA8D,GAAG,EAAE;IAEzEd,MAAM,CAACe,OAAO,CAACR,KAAK,IAAI;MACpB,MAAMS,MAAM,GAAG,IAAInB,sCAAsB,CAAC;QACtCC,QAAQ,EAAE,aAAc;AACxC,qCAAqCS,KAAK,CAACU,eAAe;AAC1D;AACA;AACA;AACA;AACA,oCAAoCV,KAAK,CAACU,eAAe;AACzD,gDAAgDV,KAAK,CAACU,eAAe;AACrE,qCAAqCV,KAAK,CAACU,eAAe;AAC1D;AACA;AACA;AACA;AACA,iBAAiB;QACDC,YAAY,EAAE9B,OAAO,IACjBA,OAAO,CAACE,OAAO,CAACC,gBAAgB,CAAC,CAAC,CAAC4B,EAAE,KAAK9B,MAAM,CAAC8B,EAAE,IACnD/B,OAAO,CAACK,IAAI,CAACC,gBAAgB,CAAC,CAAC,EAAE0B,IAAI,KAAK5B,MAAM,CAAC4B;MACzD,CAAC,CAAC;MAEFJ,MAAM,CAACjB,IAAI,GAAG,kDAAkDQ,KAAK,CAACc,OAAO,EAAE;MAC/EP,YAAY,CAACQ,IAAI,CAACN,MAAM,CAAC;IAC7B,CAAC,CAAC;IAEF5B,OAAO,CAACmC,OAAO,CAACC,QAAQ,CAAC,CAAC5B,aAAa,EAAE,GAAGkB,YAAY,CAAC,CAAC;EAC9D,CAAC,CAAC;AACN,CAAC;AAACW,OAAA,CAAAvC,oBAAA,GAAAA,oBAAA","ignoreList":[]}
|
package/plugins/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _createBulkAction = require("./createBulkAction");
|
|
7
|
+
Object.keys(_createBulkAction).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _createBulkAction[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _createBulkAction[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var _createDefaultGraphQL = require("./createDefaultGraphQL");
|
|
18
|
+
Object.keys(_createDefaultGraphQL).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _createDefaultGraphQL[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _createDefaultGraphQL[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_createBulkAction","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_createDefaultGraphQL"],"sources":["index.ts"],"sourcesContent":["export * from \"./createBulkAction\";\nexport * from \"./createDefaultGraphQL\";\n"],"mappings":";;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,iBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,iBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,iBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,qBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,qBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,qBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,qBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createBulkActionEntriesTasks: () => (import("@webiny/api").ContextPlugin<import("../types").HcmsBulkActionsContext> | (import("@webiny/tasks").TaskDefinitionPlugin<import("../types").HcmsBulkActionsContext, import("../types").IBulkActionOperationByModelInput, import("../types").IBulkActionOperationByModelOutput> | import("@webiny/tasks").TaskDefinitionPlugin<import("../types").HcmsBulkActionsContext, import("../types").IBulkActionOperationInput, import("../types").IBulkActionOperationOutput>)[])[][];
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createBulkActionEntriesTasks = void 0;
|
|
7
|
+
var _plugins = require("../plugins");
|
|
8
|
+
var _useCases = require("../useCases");
|
|
9
|
+
const createBulkActionEntriesTasks = () => {
|
|
10
|
+
return [(0, _plugins.createBulkAction)({
|
|
11
|
+
name: "delete",
|
|
12
|
+
dataLoader: _useCases.createListDeletedEntries,
|
|
13
|
+
dataProcessor: _useCases.createDeleteEntry
|
|
14
|
+
}), (0, _plugins.createBulkAction)({
|
|
15
|
+
name: "moveToFolder",
|
|
16
|
+
dataLoader: _useCases.createListLatestEntries,
|
|
17
|
+
dataProcessor: _useCases.createMoveEntryToFolder
|
|
18
|
+
}), (0, _plugins.createBulkAction)({
|
|
19
|
+
name: "moveToTrash",
|
|
20
|
+
dataLoader: _useCases.createListLatestEntries,
|
|
21
|
+
dataProcessor: _useCases.createMoveEntryToTrash
|
|
22
|
+
}), (0, _plugins.createBulkAction)({
|
|
23
|
+
name: "publish",
|
|
24
|
+
dataLoader: _useCases.createListNotPublishedEntries,
|
|
25
|
+
dataProcessor: _useCases.createPublishEntry
|
|
26
|
+
}), (0, _plugins.createBulkAction)({
|
|
27
|
+
name: "unpublish",
|
|
28
|
+
dataLoader: _useCases.createListPublishedEntries,
|
|
29
|
+
dataProcessor: _useCases.createUnpublishEntry
|
|
30
|
+
}), (0, _plugins.createBulkAction)({
|
|
31
|
+
name: "restore",
|
|
32
|
+
dataLoader: _useCases.createListDeletedEntries,
|
|
33
|
+
dataProcessor: _useCases.createRestoreEntryFromTrash
|
|
34
|
+
})];
|
|
35
|
+
};
|
|
36
|
+
exports.createBulkActionEntriesTasks = createBulkActionEntriesTasks;
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=createBulkActionEntriesTasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_plugins","require","_useCases","createBulkActionEntriesTasks","createBulkAction","name","dataLoader","createListDeletedEntries","dataProcessor","createDeleteEntry","createListLatestEntries","createMoveEntryToFolder","createMoveEntryToTrash","createListNotPublishedEntries","createPublishEntry","createListPublishedEntries","createUnpublishEntry","createRestoreEntryFromTrash","exports"],"sources":["createBulkActionEntriesTasks.ts"],"sourcesContent":["import { createBulkAction } from \"~/plugins\";\nimport {\n createDeleteEntry,\n createListDeletedEntries,\n createListLatestEntries,\n createListNotPublishedEntries,\n createListPublishedEntries,\n createMoveEntryToFolder,\n createMoveEntryToTrash,\n createPublishEntry,\n createRestoreEntryFromTrash,\n createUnpublishEntry\n} from \"~/useCases\";\n\nexport const createBulkActionEntriesTasks = () => {\n return [\n createBulkAction({\n name: \"delete\",\n dataLoader: createListDeletedEntries,\n dataProcessor: createDeleteEntry\n }),\n createBulkAction({\n name: \"moveToFolder\",\n dataLoader: createListLatestEntries,\n dataProcessor: createMoveEntryToFolder\n }),\n createBulkAction({\n name: \"moveToTrash\",\n dataLoader: createListLatestEntries,\n dataProcessor: createMoveEntryToTrash\n }),\n createBulkAction({\n name: \"publish\",\n dataLoader: createListNotPublishedEntries,\n dataProcessor: createPublishEntry\n }),\n createBulkAction({\n name: \"unpublish\",\n dataLoader: createListPublishedEntries,\n dataProcessor: createUnpublishEntry\n }),\n createBulkAction({\n name: \"restore\",\n dataLoader: createListDeletedEntries,\n dataProcessor: createRestoreEntryFromTrash\n })\n ];\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AAaO,MAAME,4BAA4B,GAAGA,CAAA,KAAM;EAC9C,OAAO,CACH,IAAAC,yBAAgB,EAAC;IACbC,IAAI,EAAE,QAAQ;IACdC,UAAU,EAAEC,kCAAwB;IACpCC,aAAa,EAAEC;EACnB,CAAC,CAAC,EACF,IAAAL,yBAAgB,EAAC;IACbC,IAAI,EAAE,cAAc;IACpBC,UAAU,EAAEI,iCAAuB;IACnCF,aAAa,EAAEG;EACnB,CAAC,CAAC,EACF,IAAAP,yBAAgB,EAAC;IACbC,IAAI,EAAE,aAAa;IACnBC,UAAU,EAAEI,iCAAuB;IACnCF,aAAa,EAAEI;EACnB,CAAC,CAAC,EACF,IAAAR,yBAAgB,EAAC;IACbC,IAAI,EAAE,SAAS;IACfC,UAAU,EAAEO,uCAA6B;IACzCL,aAAa,EAAEM;EACnB,CAAC,CAAC,EACF,IAAAV,yBAAgB,EAAC;IACbC,IAAI,EAAE,WAAW;IACjBC,UAAU,EAAES,oCAA0B;IACtCP,aAAa,EAAEQ;EACnB,CAAC,CAAC,EACF,IAAAZ,yBAAgB,EAAC;IACbC,IAAI,EAAE,SAAS;IACfC,UAAU,EAAEC,kCAAwB;IACpCC,aAAa,EAAES;EACnB,CAAC,CAAC,CACL;AACL,CAAC;AAACC,OAAA,CAAAf,4BAAA,GAAAA,4BAAA","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { HcmsBulkActionsContext, IEmptyTrashBinsInput } from "../types";
|
|
2
|
+
export declare const createEmptyTrashBinsTask: () => import("@webiny/tasks").TaskDefinitionPlugin<HcmsBulkActionsContext, IEmptyTrashBinsInput, import("@webiny/tasks").ITaskResponseDoneResultOutput>;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createEmptyTrashBinsTask = void 0;
|
|
7
|
+
var _tasks = require("@webiny/tasks");
|
|
8
|
+
var _useCases = require("../useCases");
|
|
9
|
+
const calculateDateTimeString = () => {
|
|
10
|
+
// Retrieve the retention period from the environment variable WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS,
|
|
11
|
+
// or default to 90 days if not set or set to 0.
|
|
12
|
+
const retentionPeriodFromEnv = process.env["WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS"];
|
|
13
|
+
const retentionPeriod = retentionPeriodFromEnv && Number(retentionPeriodFromEnv) !== 0 ? Number(retentionPeriodFromEnv) : 90;
|
|
14
|
+
|
|
15
|
+
// Calculate the date-time by subtracting the retention period (in days) from the current date.
|
|
16
|
+
const currentDate = new Date();
|
|
17
|
+
currentDate.setDate(currentDate.getDate() - retentionPeriod);
|
|
18
|
+
|
|
19
|
+
// Return the calculated date-time string in ISO 8601 format.
|
|
20
|
+
return currentDate.toISOString();
|
|
21
|
+
};
|
|
22
|
+
const createEmptyTrashBinsTask = () => {
|
|
23
|
+
return (0, _tasks.createTaskDefinition)({
|
|
24
|
+
isPrivate: true,
|
|
25
|
+
id: "hcmsEntriesEmptyTrashBins",
|
|
26
|
+
title: "Headless CMS - Empty all trash bins",
|
|
27
|
+
description: "Delete all entries in the trash bin for each model in the system.",
|
|
28
|
+
maxIterations: 120,
|
|
29
|
+
disableDatabaseLogs: true,
|
|
30
|
+
run: async params => {
|
|
31
|
+
const {
|
|
32
|
+
response,
|
|
33
|
+
isAborted,
|
|
34
|
+
context,
|
|
35
|
+
input,
|
|
36
|
+
isCloseToTimeout
|
|
37
|
+
} = params;
|
|
38
|
+
|
|
39
|
+
// Abort the task if needed.
|
|
40
|
+
if (isAborted()) {
|
|
41
|
+
return response.aborted();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Fetch all tenants, excluding those already processed.
|
|
45
|
+
const baseTenants = await context.tenancy.listTenants();
|
|
46
|
+
const executedTenantIds = input.executedTenantIds || [];
|
|
47
|
+
const tenants = baseTenants.filter(tenant => !executedTenantIds.includes(tenant.id));
|
|
48
|
+
let shouldContinue = false; // Flag to check if task should continue.
|
|
49
|
+
|
|
50
|
+
// Iterate over each tenant.
|
|
51
|
+
await context.tenancy.withEachTenant(tenants, async tenant => {
|
|
52
|
+
if (isCloseToTimeout()) {
|
|
53
|
+
shouldContinue = true;
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Reloading locales for the current tenant to ensure the correct data is available before proceeding.
|
|
58
|
+
await context.i18n.reloadLocales();
|
|
59
|
+
|
|
60
|
+
// Fetch all locales for the tenant.
|
|
61
|
+
const locales = context.i18n.getLocales();
|
|
62
|
+
await context.i18n.withEachLocale(locales, async () => {
|
|
63
|
+
if (isCloseToTimeout()) {
|
|
64
|
+
shouldContinue = true;
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// List all non-private models for the current locale.
|
|
69
|
+
const models = await context.security.withoutAuthorization(async () => (await context.cms.listModels()).filter(m => !m.isPrivate));
|
|
70
|
+
|
|
71
|
+
// Process each model to delete trashed entries.
|
|
72
|
+
for (const model of models) {
|
|
73
|
+
const list = (0, _useCases.createListDeletedEntries)(context); // List trashed entries.
|
|
74
|
+
const mutation = (0, _useCases.createDeleteEntry)(context); // Mutation to delete entries.
|
|
75
|
+
|
|
76
|
+
// Query parameters for fetching deleted entries older than a minute ago.
|
|
77
|
+
const listEntriesParams = {
|
|
78
|
+
where: {
|
|
79
|
+
deletedOn_lt: calculateDateTimeString()
|
|
80
|
+
},
|
|
81
|
+
limit: 50
|
|
82
|
+
};
|
|
83
|
+
let result;
|
|
84
|
+
// Continue deleting entries while there are entries left to delete.
|
|
85
|
+
while ((result = await list.execute(model.modelId, listEntriesParams)) && result.meta.totalCount > 0) {
|
|
86
|
+
if (isCloseToTimeout()) {
|
|
87
|
+
shouldContinue = true;
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
for (const entry of result.entries) {
|
|
91
|
+
if (isCloseToTimeout()) {
|
|
92
|
+
shouldContinue = true;
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
// Delete each entry individually.
|
|
96
|
+
await mutation.execute(model, entry.id);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
// If the task isn't continuing, add the tenant to the executed list.
|
|
103
|
+
if (!shouldContinue) {
|
|
104
|
+
executedTenantIds.push(tenant.id);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
// Continue the task or mark it as done based on the `shouldContinue` flag.
|
|
109
|
+
return shouldContinue ? response.continue({
|
|
110
|
+
...input,
|
|
111
|
+
executedTenantIds
|
|
112
|
+
}) : response.done("Task done: emptied the trash bin for all registered models.");
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
exports.createEmptyTrashBinsTask = createEmptyTrashBinsTask;
|
|
117
|
+
|
|
118
|
+
//# sourceMappingURL=createEmptyTrashBinsTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_tasks","require","_useCases","calculateDateTimeString","retentionPeriodFromEnv","process","env","retentionPeriod","Number","currentDate","Date","setDate","getDate","toISOString","createEmptyTrashBinsTask","createTaskDefinition","isPrivate","id","title","description","maxIterations","disableDatabaseLogs","run","params","response","isAborted","context","input","isCloseToTimeout","aborted","baseTenants","tenancy","listTenants","executedTenantIds","tenants","filter","tenant","includes","shouldContinue","withEachTenant","i18n","reloadLocales","locales","getLocales","withEachLocale","models","security","withoutAuthorization","cms","listModels","m","model","list","createListDeletedEntries","mutation","createDeleteEntry","listEntriesParams","where","deletedOn_lt","limit","result","execute","modelId","meta","totalCount","entry","entries","push","continue","done","exports"],"sources":["createEmptyTrashBinsTask.ts"],"sourcesContent":["import { createTaskDefinition } from \"@webiny/tasks\";\nimport { createDeleteEntry, createListDeletedEntries } from \"~/useCases\";\nimport type {\n HcmsBulkActionsContext,\n IEmptyTrashBinsInput,\n IEmptyTrashBinsOutput,\n IEmptyTrashBinsTaskParams\n} from \"~/types\";\n\nconst calculateDateTimeString = () => {\n // Retrieve the retention period from the environment variable WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS,\n // or default to 90 days if not set or set to 0.\n const retentionPeriodFromEnv = process.env[\"WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS\"];\n const retentionPeriod =\n retentionPeriodFromEnv && Number(retentionPeriodFromEnv) !== 0\n ? Number(retentionPeriodFromEnv)\n : 90;\n\n // Calculate the date-time by subtracting the retention period (in days) from the current date.\n const currentDate = new Date();\n currentDate.setDate(currentDate.getDate() - retentionPeriod);\n\n // Return the calculated date-time string in ISO 8601 format.\n return currentDate.toISOString();\n};\n\nexport const createEmptyTrashBinsTask = () => {\n return createTaskDefinition<\n HcmsBulkActionsContext,\n IEmptyTrashBinsInput,\n IEmptyTrashBinsOutput\n >({\n isPrivate: true,\n id: \"hcmsEntriesEmptyTrashBins\",\n title: \"Headless CMS - Empty all trash bins\",\n description: \"Delete all entries in the trash bin for each model in the system.\",\n maxIterations: 120,\n disableDatabaseLogs: true,\n run: async (params: IEmptyTrashBinsTaskParams) => {\n const { response, isAborted, context, input, isCloseToTimeout } = params;\n\n // Abort the task if needed.\n if (isAborted()) {\n return response.aborted();\n }\n\n // Fetch all tenants, excluding those already processed.\n const baseTenants = await context.tenancy.listTenants();\n const executedTenantIds = input.executedTenantIds || [];\n const tenants = baseTenants.filter(tenant => !executedTenantIds.includes(tenant.id));\n let shouldContinue = false; // Flag to check if task should continue.\n\n // Iterate over each tenant.\n await context.tenancy.withEachTenant(tenants, async tenant => {\n if (isCloseToTimeout()) {\n shouldContinue = true;\n return;\n }\n\n // Reloading locales for the current tenant to ensure the correct data is available before proceeding.\n await context.i18n.reloadLocales();\n\n // Fetch all locales for the tenant.\n const locales = context.i18n.getLocales();\n await context.i18n.withEachLocale(locales, async () => {\n if (isCloseToTimeout()) {\n shouldContinue = true;\n return;\n }\n\n // List all non-private models for the current locale.\n const models = await context.security.withoutAuthorization(async () =>\n (await context.cms.listModels()).filter(m => !m.isPrivate)\n );\n\n // Process each model to delete trashed entries.\n for (const model of models) {\n const list = createListDeletedEntries(context); // List trashed entries.\n const mutation = createDeleteEntry(context); // Mutation to delete entries.\n\n // Query parameters for fetching deleted entries older than a minute ago.\n const listEntriesParams = {\n where: { deletedOn_lt: calculateDateTimeString() },\n limit: 50\n };\n\n let result;\n // Continue deleting entries while there are entries left to delete.\n while (\n (result = await list.execute(model.modelId, listEntriesParams)) &&\n result.meta.totalCount > 0\n ) {\n if (isCloseToTimeout()) {\n shouldContinue = true;\n break;\n }\n for (const entry of result.entries) {\n if (isCloseToTimeout()) {\n shouldContinue = true;\n break;\n }\n // Delete each entry individually.\n await mutation.execute(model, entry.id);\n }\n }\n }\n });\n\n // If the task isn't continuing, add the tenant to the executed list.\n if (!shouldContinue) {\n executedTenantIds.push(tenant.id);\n }\n });\n\n // Continue the task or mark it as done based on the `shouldContinue` flag.\n return shouldContinue\n ? response.continue({ ...input, executedTenantIds })\n : response.done(\"Task done: emptied the trash bin for all registered models.\");\n }\n });\n};\n"],"mappings":"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","ignoreList":[]}
|
package/tasks/index.d.ts
ADDED
package/tasks/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _createBulkActionEntriesTasks = require("./createBulkActionEntriesTasks");
|
|
7
|
+
Object.keys(_createBulkActionEntriesTasks).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _createBulkActionEntriesTasks[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _createBulkActionEntriesTasks[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var _createEmptyTrashBinsTask = require("./createEmptyTrashBinsTask");
|
|
18
|
+
Object.keys(_createEmptyTrashBinsTask).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _createEmptyTrashBinsTask[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _createEmptyTrashBinsTask[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_createBulkActionEntriesTasks","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_createEmptyTrashBinsTask"],"sources":["index.ts"],"sourcesContent":["export * from \"./createBulkActionEntriesTasks\";\nexport * from \"./createEmptyTrashBinsTask\";\n"],"mappings":";;;;;AAAA,IAAAA,6BAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,6BAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,6BAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,6BAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,yBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,yBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,yBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,yBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
package/types.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { CmsContext } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import type { Context as BaseContext } from "@webiny/handler/types";
|
|
3
|
+
import type { Context as TasksContext, ITaskResponseDoneResultOutput, ITaskRunParams } from "@webiny/tasks/types";
|
|
4
|
+
import type { SecurityIdentity } from "@webiny/api-security/types";
|
|
5
|
+
export interface HcmsBulkActionsContext extends BaseContext, CmsContext, TasksContext {
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Bulk Action Operation
|
|
9
|
+
*/
|
|
10
|
+
export interface IBulkActionOperationInput {
|
|
11
|
+
modelId: string;
|
|
12
|
+
ids: string[];
|
|
13
|
+
data?: Record<string, any>;
|
|
14
|
+
identity: SecurityIdentity;
|
|
15
|
+
done?: string[];
|
|
16
|
+
failed?: string[];
|
|
17
|
+
}
|
|
18
|
+
export interface IBulkActionOperationOutput extends ITaskResponseDoneResultOutput {
|
|
19
|
+
done: string[];
|
|
20
|
+
failed: string[];
|
|
21
|
+
}
|
|
22
|
+
export type IBulkActionOperationTaskParams = ITaskRunParams<HcmsBulkActionsContext, IBulkActionOperationInput, IBulkActionOperationOutput>;
|
|
23
|
+
/**
|
|
24
|
+
* Bulk Action Operation By Model
|
|
25
|
+
*/
|
|
26
|
+
export declare enum BulkActionOperationByModelAction {
|
|
27
|
+
CREATE_SUBTASKS = "CREATE_SUBTASKS",
|
|
28
|
+
CHECK_MORE_SUBTASKS = "CHECK_MORE_SUBTASKS",
|
|
29
|
+
PROCESS_SUBTASKS = "PROCESS_SUBTASKS",
|
|
30
|
+
END_TASK = "END_TASK"
|
|
31
|
+
}
|
|
32
|
+
export interface IBulkActionOperationByModelInput {
|
|
33
|
+
modelId: string;
|
|
34
|
+
identity?: SecurityIdentity;
|
|
35
|
+
where?: Record<string, any>;
|
|
36
|
+
search?: string;
|
|
37
|
+
after?: string | null;
|
|
38
|
+
data?: Record<string, any>;
|
|
39
|
+
action?: BulkActionOperationByModelAction;
|
|
40
|
+
}
|
|
41
|
+
export interface IBulkActionOperationByModelOutput extends ITaskResponseDoneResultOutput {
|
|
42
|
+
done: string[];
|
|
43
|
+
failed: string[];
|
|
44
|
+
}
|
|
45
|
+
export type IBulkActionOperationByModelTaskParams = ITaskRunParams<HcmsBulkActionsContext, IBulkActionOperationByModelInput, IBulkActionOperationByModelOutput>;
|
|
46
|
+
/**
|
|
47
|
+
* Empty Trash Bin
|
|
48
|
+
*/
|
|
49
|
+
export interface IEmptyTrashBinsInput {
|
|
50
|
+
executedTenantIds?: string[] | null;
|
|
51
|
+
}
|
|
52
|
+
export type IEmptyTrashBinsOutput = ITaskResponseDoneResultOutput;
|
|
53
|
+
export type IEmptyTrashBinsTaskParams = ITaskRunParams<HcmsBulkActionsContext, IEmptyTrashBinsInput, IEmptyTrashBinsOutput>;
|
package/types.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.BulkActionOperationByModelAction = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Bulk Action Operation
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Bulk Action Operation By Model
|
|
12
|
+
*/
|
|
13
|
+
let BulkActionOperationByModelAction = exports.BulkActionOperationByModelAction = /*#__PURE__*/function (BulkActionOperationByModelAction) {
|
|
14
|
+
BulkActionOperationByModelAction["CREATE_SUBTASKS"] = "CREATE_SUBTASKS";
|
|
15
|
+
BulkActionOperationByModelAction["CHECK_MORE_SUBTASKS"] = "CHECK_MORE_SUBTASKS";
|
|
16
|
+
BulkActionOperationByModelAction["PROCESS_SUBTASKS"] = "PROCESS_SUBTASKS";
|
|
17
|
+
BulkActionOperationByModelAction["END_TASK"] = "END_TASK";
|
|
18
|
+
return BulkActionOperationByModelAction;
|
|
19
|
+
}({});
|
|
20
|
+
/**
|
|
21
|
+
* Empty Trash Bin
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=types.js.map
|
package/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BulkActionOperationByModelAction","exports"],"sources":["types.ts"],"sourcesContent":["import type { CmsContext } from \"@webiny/api-headless-cms/types\";\nimport type { Context as BaseContext } from \"@webiny/handler/types\";\nimport type {\n Context as TasksContext,\n ITaskResponseDoneResultOutput,\n ITaskRunParams\n} from \"@webiny/tasks/types\";\nimport type { SecurityIdentity } from \"@webiny/api-security/types\";\n\nexport interface HcmsBulkActionsContext extends BaseContext, CmsContext, TasksContext {}\n\n/**\n * Bulk Action Operation\n */\n\nexport interface IBulkActionOperationInput {\n modelId: string;\n ids: string[];\n data?: Record<string, any>;\n identity: SecurityIdentity;\n done?: string[];\n failed?: string[];\n}\n\nexport interface IBulkActionOperationOutput extends ITaskResponseDoneResultOutput {\n done: string[];\n failed: string[];\n}\n\nexport type IBulkActionOperationTaskParams = ITaskRunParams<\n HcmsBulkActionsContext,\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n>;\n\n/**\n * Bulk Action Operation By Model\n */\n\nexport enum 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 interface IBulkActionOperationByModelInput {\n modelId: string;\n identity?: SecurityIdentity;\n where?: Record<string, any>;\n search?: string;\n after?: string | null;\n data?: Record<string, any>;\n action?: BulkActionOperationByModelAction;\n}\n\nexport interface IBulkActionOperationByModelOutput extends ITaskResponseDoneResultOutput {\n done: string[];\n failed: string[];\n}\n\nexport type IBulkActionOperationByModelTaskParams = ITaskRunParams<\n HcmsBulkActionsContext,\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput\n>;\n\n/**\n * Empty Trash Bin\n */\n\nexport interface IEmptyTrashBinsInput {\n executedTenantIds?: string[] | null;\n}\n\nexport type IEmptyTrashBinsOutput = ITaskResponseDoneResultOutput;\n\nexport type IEmptyTrashBinsTaskParams = ITaskRunParams<\n HcmsBulkActionsContext,\n IEmptyTrashBinsInput,\n IEmptyTrashBinsOutput\n>;\n"],"mappings":";;;;;;AAWA;AACA;AACA;AAsBA;AACA;AACA;AAFA,IAIYA,gCAAgC,GAAAC,OAAA,CAAAD,gCAAA,0BAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAA,OAAhCA,gCAAgC;AAAA;AA4B5C;AACA;AACA","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CmsModel } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import type { IProcessEntry } from "../abstractions";
|
|
3
|
+
import type { HcmsBulkActionsContext } from "../types";
|
|
4
|
+
declare class DeleteEntry implements IProcessEntry {
|
|
5
|
+
private readonly context;
|
|
6
|
+
constructor(context: HcmsBulkActionsContext);
|
|
7
|
+
execute(model: CmsModel, id: string): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export declare const createDeleteEntry: (context: HcmsBulkActionsContext) => DeleteEntry;
|
|
10
|
+
export {};
|