@webiny/api-headless-cms-tasks 5.41.4 → 5.42.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/index.d.ts +3 -1
  2. package/index.js +8 -1
  3. package/index.js.map +1 -1
  4. package/package.json +22 -8
  5. package/tasks/deleteModel/DeleteModelRunner.d.ts +19 -0
  6. package/tasks/deleteModel/DeleteModelRunner.js +139 -0
  7. package/tasks/deleteModel/DeleteModelRunner.js.map +1 -0
  8. package/tasks/deleteModel/constants.d.ts +1 -0
  9. package/tasks/deleteModel/constants.js +9 -0
  10. package/tasks/deleteModel/constants.js.map +1 -0
  11. package/tasks/deleteModel/graphql/attachLifecycleEvents.d.ts +5 -0
  12. package/tasks/deleteModel/graphql/attachLifecycleEvents.js +40 -0
  13. package/tasks/deleteModel/graphql/attachLifecycleEvents.js.map +1 -0
  14. package/tasks/deleteModel/graphql/cancelDeleteModel.d.ts +7 -0
  15. package/tasks/deleteModel/graphql/cancelDeleteModel.js +64 -0
  16. package/tasks/deleteModel/graphql/cancelDeleteModel.js.map +1 -0
  17. package/tasks/deleteModel/graphql/crud.d.ts +3 -0
  18. package/tasks/deleteModel/graphql/crud.js +82 -0
  19. package/tasks/deleteModel/graphql/crud.js.map +1 -0
  20. package/tasks/deleteModel/graphql/fullyDeleteModel.d.ts +7 -0
  21. package/tasks/deleteModel/graphql/fullyDeleteModel.js +57 -0
  22. package/tasks/deleteModel/graphql/fullyDeleteModel.js.map +1 -0
  23. package/tasks/deleteModel/graphql/getDeleteModelProgress.d.ts +7 -0
  24. package/tasks/deleteModel/graphql/getDeleteModelProgress.js +66 -0
  25. package/tasks/deleteModel/graphql/getDeleteModelProgress.js.map +1 -0
  26. package/tasks/deleteModel/graphql/index.d.ts +3 -0
  27. package/tasks/deleteModel/graphql/index.js +166 -0
  28. package/tasks/deleteModel/graphql/index.js.map +1 -0
  29. package/tasks/deleteModel/graphql/isModelBeingDeleted.d.ts +5 -0
  30. package/tasks/deleteModel/graphql/isModelBeingDeleted.js +15 -0
  31. package/tasks/deleteModel/graphql/isModelBeingDeleted.js.map +1 -0
  32. package/tasks/deleteModel/graphql/status.d.ts +3 -0
  33. package/tasks/deleteModel/graphql/status.js +24 -0
  34. package/tasks/deleteModel/graphql/status.js.map +1 -0
  35. package/tasks/deleteModel/helpers/confirmation.d.ts +6 -0
  36. package/tasks/deleteModel/helpers/confirmation.js +23 -0
  37. package/tasks/deleteModel/helpers/confirmation.js.map +1 -0
  38. package/tasks/deleteModel/helpers/store.d.ts +10 -0
  39. package/tasks/deleteModel/helpers/store.js +26 -0
  40. package/tasks/deleteModel/helpers/store.js.map +1 -0
  41. package/tasks/deleteModel/index.d.ts +3 -0
  42. package/tasks/deleteModel/index.js +50 -0
  43. package/tasks/deleteModel/index.js.map +1 -0
  44. package/tasks/deleteModel/types.d.ts +33 -0
  45. package/tasks/deleteModel/types.js +15 -0
  46. package/tasks/deleteModel/types.js.map +1 -0
  47. package/types.d.ts +14 -2
  48. package/types.js.map +1 -1
package/index.d.ts CHANGED
@@ -1 +1,3 @@
1
- export declare const createHcmsTasks: () => (((import("@webiny/handler-aws").EventBridgeEventHandler<"WebinyEmptyTrashBin", Record<string, any>, any> | import("@webiny/handler").HandlerOnRequestPlugin)[] | import("@webiny/api").ContextPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext>)[] | (import("@webiny/api").ContextPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext> | (import("@webiny/tasks").TaskDefinitionPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext, import("@webiny/api-headless-cms-bulk-actions/types").IBulkActionOperationByModelInput, import("@webiny/api-headless-cms-bulk-actions/types").IBulkActionOperationByModelOutput> | import("@webiny/tasks").TaskDefinitionPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext, import("@webiny/api-headless-cms-bulk-actions/types").IBulkActionOperationInput, import("@webiny/api-headless-cms-bulk-actions/types").IBulkActionOperationOutput>)[])[][] | import("@webiny/tasks").TaskDefinitionPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext, import("@webiny/api-headless-cms-bulk-actions/types").IEmptyTrashBinsInput, import("@webiny/tasks").ITaskResponseDoneResultOutput> | import("@webiny/plugins/types").Plugin<Record<string, any>>[])[];
1
+ import { createDeleteModelTask } from "./tasks/deleteModel";
2
+ export { createDeleteModelTask };
3
+ export declare const createHcmsTasks: () => ((import("@webiny/api").ContextPlugin<import("./types").HcmsTasksContext> | import("@webiny/tasks").TaskDefinitionPlugin<import("./types").HcmsTasksContext, import("./tasks/deleteModel/types").IDeleteModelTaskInput, import("./tasks/deleteModel/types").IDeleteModelTaskOutput>)[] | ((import("@webiny/handler-aws").EventBridgeEventHandler<"WebinyEmptyTrashBin", Record<string, any>, any> | import("@webiny/handler").HandlerOnRequestPlugin)[] | import("@webiny/api").ContextPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext>)[] | (import("@webiny/api").ContextPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext> | (import("@webiny/tasks").TaskDefinitionPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext, import("@webiny/api-headless-cms-bulk-actions/types").IBulkActionOperationByModelInput, import("@webiny/api-headless-cms-bulk-actions/types").IBulkActionOperationByModelOutput> | import("@webiny/tasks").TaskDefinitionPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext, import("@webiny/api-headless-cms-bulk-actions/types").IBulkActionOperationInput, import("@webiny/api-headless-cms-bulk-actions/types").IBulkActionOperationOutput>)[])[][] | import("@webiny/tasks").TaskDefinitionPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext, import("@webiny/api-headless-cms-bulk-actions/types").IEmptyTrashBinsInput, import("@webiny/tasks").ITaskResponseDoneResultOutput> | import("@webiny/plugins/types").Plugin<Record<string, any>>[])[];
package/index.js CHANGED
@@ -3,10 +3,17 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "createDeleteModelTask", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _deleteModel.createDeleteModelTask;
10
+ }
11
+ });
6
12
  exports.createHcmsTasks = void 0;
7
13
  var _apiHeadlessCmsBulkActions = require("@webiny/api-headless-cms-bulk-actions");
8
14
  var _apiHeadlessCmsImportExport = require("@webiny/api-headless-cms-import-export");
9
- const createHcmsTasks = () => [(0, _apiHeadlessCmsBulkActions.createHcmsBulkActions)(), (0, _apiHeadlessCmsBulkActions.createBulkActionEntriesTasks)(), (0, _apiHeadlessCmsBulkActions.createEmptyTrashBinsTask)(), (0, _apiHeadlessCmsImportExport.createHeadlessCmsImportExport)()];
15
+ var _deleteModel = require("./tasks/deleteModel");
16
+ const createHcmsTasks = () => [(0, _apiHeadlessCmsBulkActions.createHcmsBulkActions)(), (0, _apiHeadlessCmsBulkActions.createBulkActionEntriesTasks)(), (0, _apiHeadlessCmsBulkActions.createEmptyTrashBinsTask)(), (0, _apiHeadlessCmsImportExport.createHeadlessCmsImportExport)(), (0, _deleteModel.createDeleteModelTask)()];
10
17
  exports.createHcmsTasks = createHcmsTasks;
11
18
 
12
19
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_apiHeadlessCmsBulkActions","require","_apiHeadlessCmsImportExport","createHcmsTasks","createHcmsBulkActions","createBulkActionEntriesTasks","createEmptyTrashBinsTask","createHeadlessCmsImportExport","exports"],"sources":["index.ts"],"sourcesContent":["import {\n createBulkActionEntriesTasks,\n createEmptyTrashBinsTask,\n createHcmsBulkActions\n} from \"@webiny/api-headless-cms-bulk-actions\";\nimport { createHeadlessCmsImportExport } from \"@webiny/api-headless-cms-import-export\";\n\nexport const createHcmsTasks = () => [\n createHcmsBulkActions(),\n createBulkActionEntriesTasks(),\n createEmptyTrashBinsTask(),\n createHeadlessCmsImportExport()\n];\n"],"mappings":";;;;;;AAAA,IAAAA,0BAAA,GAAAC,OAAA;AAKA,IAAAC,2BAAA,GAAAD,OAAA;AAEO,MAAME,eAAe,GAAGA,CAAA,KAAM,CACjC,IAAAC,gDAAqB,EAAC,CAAC,EACvB,IAAAC,uDAA4B,EAAC,CAAC,EAC9B,IAAAC,mDAAwB,EAAC,CAAC,EAC1B,IAAAC,yDAA6B,EAAC,CAAC,CAClC;AAACC,OAAA,CAAAL,eAAA,GAAAA,eAAA","ignoreList":[]}
1
+ {"version":3,"names":["_apiHeadlessCmsBulkActions","require","_apiHeadlessCmsImportExport","_deleteModel","createHcmsTasks","createHcmsBulkActions","createBulkActionEntriesTasks","createEmptyTrashBinsTask","createHeadlessCmsImportExport","createDeleteModelTask","exports"],"sources":["index.ts"],"sourcesContent":["import {\n createBulkActionEntriesTasks,\n createEmptyTrashBinsTask,\n createHcmsBulkActions\n} from \"@webiny/api-headless-cms-bulk-actions\";\nimport { createHeadlessCmsImportExport } from \"@webiny/api-headless-cms-import-export\";\nimport { createDeleteModelTask } from \"~/tasks/deleteModel\";\n\nexport { createDeleteModelTask };\n\nexport const createHcmsTasks = () => [\n createHcmsBulkActions(),\n createBulkActionEntriesTasks(),\n createEmptyTrashBinsTask(),\n createHeadlessCmsImportExport(),\n createDeleteModelTask()\n];\n"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,0BAAA,GAAAC,OAAA;AAKA,IAAAC,2BAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAIO,MAAMG,eAAe,GAAGA,CAAA,KAAM,CACjC,IAAAC,gDAAqB,EAAC,CAAC,EACvB,IAAAC,uDAA4B,EAAC,CAAC,EAC9B,IAAAC,mDAAwB,EAAC,CAAC,EAC1B,IAAAC,yDAA6B,EAAC,CAAC,EAC/B,IAAAC,kCAAqB,EAAC,CAAC,CAC1B;AAACC,OAAA,CAAAN,eAAA,GAAAA,eAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms-tasks",
3
- "version": "5.41.4",
3
+ "version": "5.42.0-beta.1",
4
4
  "main": "index.js",
5
5
  "description": "Background tasks for Webiny Headless CMS",
6
6
  "keywords": [
@@ -13,14 +13,28 @@
13
13
  },
14
14
  "license": "MIT",
15
15
  "dependencies": {
16
- "@webiny/api-headless-cms-bulk-actions": "5.41.4",
17
- "@webiny/api-headless-cms-import-export": "5.41.4"
16
+ "@webiny/api": "5.42.0-beta.1",
17
+ "@webiny/api-aco": "5.42.0-beta.1",
18
+ "@webiny/api-headless-cms": "5.42.0-beta.1",
19
+ "@webiny/api-headless-cms-bulk-actions": "5.42.0-beta.1",
20
+ "@webiny/api-headless-cms-import-export": "5.42.0-beta.1",
21
+ "@webiny/db": "5.42.0-beta.1",
22
+ "@webiny/error": "5.42.0-beta.1",
23
+ "@webiny/handler-graphql": "5.42.0-beta.1",
24
+ "@webiny/tasks": "5.42.0-beta.1",
25
+ "@webiny/utils": "5.42.0-beta.1",
26
+ "zod": "3.23.8"
18
27
  },
19
28
  "devDependencies": {
20
- "@babel/cli": "7.24.1",
21
- "@babel/core": "7.24.3",
22
- "@webiny/cli": "5.41.4",
23
- "@webiny/project-utils": "5.41.4",
29
+ "@webiny/api-i18n": "5.42.0-beta.1",
30
+ "@webiny/api-security": "5.42.0-beta.1",
31
+ "@webiny/api-tenancy": "5.42.0-beta.1",
32
+ "@webiny/api-wcp": "5.42.0-beta.1",
33
+ "@webiny/cli": "5.42.0-beta.1",
34
+ "@webiny/handler": "5.42.0-beta.1",
35
+ "@webiny/handler-aws": "5.42.0-beta.1",
36
+ "@webiny/plugins": "5.42.0-beta.1",
37
+ "@webiny/project-utils": "5.42.0-beta.1",
24
38
  "ttypescript": "1.5.15",
25
39
  "typescript": "4.9.5"
26
40
  },
@@ -32,5 +46,5 @@
32
46
  "access": "public",
33
47
  "directory": "dist"
34
48
  },
35
- "gitHead": "94922b33af59db5afe75127bb07443ce7f1448c4"
49
+ "gitHead": "5e69da579efa4f2c8268e0c97ac6407ddc3f5f07"
36
50
  }
@@ -0,0 +1,19 @@
1
+ import { ITaskResponse, ITaskResponseResult, ITaskRunParams } from "@webiny/tasks";
2
+ import { HcmsTasksContext } from "../../types";
3
+ import { IDeleteModelTaskInput, IDeleteModelTaskOutput } from "./types";
4
+ export interface IDeleteModelRunnerParams<C extends HcmsTasksContext, I extends IDeleteModelTaskInput, O extends IDeleteModelTaskOutput> {
5
+ taskId: string;
6
+ context: C;
7
+ response: ITaskResponse<I, O>;
8
+ }
9
+ export type IExecuteParams<C extends HcmsTasksContext, I extends IDeleteModelTaskInput, O extends IDeleteModelTaskOutput> = Omit<ITaskRunParams<C, I, O>, "context" | "response" | "store" | "timer" | "trigger">;
10
+ export declare class DeleteModelRunner<C extends HcmsTasksContext, I extends IDeleteModelTaskInput, O extends IDeleteModelTaskOutput> {
11
+ private readonly taskId;
12
+ private readonly context;
13
+ private readonly response;
14
+ constructor(params: IDeleteModelRunnerParams<C, I, O>);
15
+ execute(params: IExecuteParams<C, I, O>): Promise<ITaskResponseResult<I, O>>;
16
+ private getModel;
17
+ private removeBeingDeleted;
18
+ }
19
+ export declare const createDeleteModelRunner: <C extends HcmsTasksContext, I extends IDeleteModelTaskInput, O extends IDeleteModelTaskOutput>(params: IDeleteModelRunnerParams<C, I, O>) => DeleteModelRunner<C, I, O>;
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createDeleteModelRunner = exports.DeleteModelRunner = void 0;
7
+ var _store = require("./helpers/store");
8
+ class DeleteModelRunner {
9
+ constructor(params) {
10
+ this.taskId = params.taskId;
11
+ this.context = params.context;
12
+ this.response = params.response;
13
+ }
14
+ async execute(params) {
15
+ const {
16
+ input,
17
+ isCloseToTimeout,
18
+ isAborted
19
+ } = params;
20
+ const model = await this.getModel(input.modelId);
21
+ let hasMoreItems = false;
22
+ let lastDeletedId = input.lastDeletedId;
23
+ do {
24
+ if (isAborted()) {
25
+ /**
26
+ * If the task was aborted, we need to remove the task tag from the model.
27
+ */
28
+ await this.removeBeingDeleted(model);
29
+ return this.response.aborted();
30
+ } else if (isCloseToTimeout()) {
31
+ return this.response.continue({
32
+ ...input,
33
+ lastDeletedId
34
+ });
35
+ }
36
+ const where = {
37
+ latest: true
38
+ };
39
+ if (lastDeletedId) {
40
+ where.entryId_gte = lastDeletedId;
41
+ }
42
+ const {
43
+ items,
44
+ hasMoreItems: metaHasMoreItems
45
+ } = await this.context.cms.storageOperations.entries.list(model, {
46
+ limit: 1000,
47
+ where,
48
+ sort: ["entryId_ASC"]
49
+ });
50
+ for (const item of items) {
51
+ try {
52
+ await this.context.cms.deleteEntry(model, item.id, {
53
+ permanently: true,
54
+ force: true
55
+ });
56
+ } catch (ex) {
57
+ console.error("Failed to delete entry.", {
58
+ model: model.modelId,
59
+ id: item.id
60
+ });
61
+ return this.response.error(new Error(`Failed to delete entry "${item.id}". Cannot continue.`));
62
+ }
63
+ lastDeletedId = item.entryId;
64
+ }
65
+ hasMoreItems = metaHasMoreItems;
66
+ } while (hasMoreItems);
67
+ /**
68
+ * Let's do one more check. If there are items, continue the task with 5 seconds delay.
69
+ */
70
+ const {
71
+ items
72
+ } = await this.context.cms.storageOperations.entries.list(model, {
73
+ limit: 1,
74
+ where: {
75
+ latest: true
76
+ }
77
+ });
78
+ if (items.length > 0) {
79
+ console.log("There are still items to be deleted. Continuing the task.");
80
+ return this.response.continue({
81
+ ...input
82
+ }, {
83
+ seconds: 5
84
+ });
85
+ }
86
+ let hasMoreFolders = false;
87
+ do {
88
+ const [items, meta] = await this.context.aco.folder.list({
89
+ where: {
90
+ type: `cms:${model.modelId}`
91
+ },
92
+ limit: 1000
93
+ });
94
+ for (const item of items) {
95
+ try {
96
+ await this.context.aco.folder.delete(item.id);
97
+ } catch (ex) {
98
+ console.error(`Failed to delete folder "${item.id}".`, ex);
99
+ return this.response.error(ex);
100
+ }
101
+ }
102
+ hasMoreFolders = meta.hasMoreItems;
103
+ } while (hasMoreFolders);
104
+
105
+ /**
106
+ * When there is no more records to be deleted, let's delete the model, if it's not a plugin.
107
+ */
108
+ await this.removeBeingDeleted(model);
109
+ if (model.isPlugin) {
110
+ return this.response.done();
111
+ }
112
+ try {
113
+ await this.context.cms.deleteModel(model.modelId);
114
+ } catch (ex) {
115
+ const message = `Failed to delete model "${model.modelId}".`;
116
+ console.error(message);
117
+ return this.response.error(ex);
118
+ }
119
+ return this.response.done();
120
+ }
121
+ async getModel(modelId) {
122
+ const model = await this.context.cms.getModel(modelId);
123
+ if (!model) {
124
+ throw new Error(`Model "${modelId}" not found.`);
125
+ }
126
+ return model;
127
+ }
128
+ async removeBeingDeleted(model) {
129
+ const key = (0, _store.createStoreKey)(model);
130
+ await this.context.db.store.removeValue(key);
131
+ }
132
+ }
133
+ exports.DeleteModelRunner = DeleteModelRunner;
134
+ const createDeleteModelRunner = params => {
135
+ return new DeleteModelRunner(params);
136
+ };
137
+ exports.createDeleteModelRunner = createDeleteModelRunner;
138
+
139
+ //# sourceMappingURL=DeleteModelRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_store","require","DeleteModelRunner","constructor","params","taskId","context","response","execute","input","isCloseToTimeout","isAborted","model","getModel","modelId","hasMoreItems","lastDeletedId","removeBeingDeleted","aborted","continue","where","latest","entryId_gte","items","metaHasMoreItems","cms","storageOperations","entries","list","limit","sort","item","deleteEntry","id","permanently","force","ex","console","error","Error","entryId","length","log","seconds","hasMoreFolders","meta","aco","folder","type","delete","isPlugin","done","deleteModel","message","key","createStoreKey","db","store","removeValue","exports","createDeleteModelRunner"],"sources":["DeleteModelRunner.ts"],"sourcesContent":["import { ITaskResponse, ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks\";\nimport { HcmsTasksContext } from \"~/types\";\nimport { IDeleteModelTaskInput, IDeleteModelTaskOutput } from \"./types\";\nimport { CmsEntryListWhere, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { createStoreKey } from \"~/tasks/deleteModel/helpers/store\";\n\nexport interface IDeleteModelRunnerParams<\n C extends HcmsTasksContext,\n I extends IDeleteModelTaskInput,\n O extends IDeleteModelTaskOutput\n> {\n taskId: string;\n context: C;\n response: ITaskResponse<I, O>;\n}\n\nexport type IExecuteParams<\n C extends HcmsTasksContext,\n I extends IDeleteModelTaskInput,\n O extends IDeleteModelTaskOutput\n> = Omit<ITaskRunParams<C, I, O>, \"context\" | \"response\" | \"store\" | \"timer\" | \"trigger\">;\n\nexport class DeleteModelRunner<\n C extends HcmsTasksContext,\n I extends IDeleteModelTaskInput,\n O extends IDeleteModelTaskOutput\n> {\n private readonly taskId: string;\n private readonly context: C;\n private readonly response: ITaskResponse<I, O>;\n\n public constructor(params: IDeleteModelRunnerParams<C, I, O>) {\n this.taskId = params.taskId;\n this.context = params.context;\n this.response = params.response;\n }\n\n public async execute(params: IExecuteParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { input, isCloseToTimeout, isAborted } = params;\n\n const model = await this.getModel(input.modelId);\n\n let hasMoreItems = false;\n let lastDeletedId: string | undefined = input.lastDeletedId;\n do {\n if (isAborted()) {\n /**\n * If the task was aborted, we need to remove the task tag from the model.\n */\n await this.removeBeingDeleted(model);\n return this.response.aborted();\n } else if (isCloseToTimeout()) {\n return this.response.continue({\n ...input,\n lastDeletedId\n });\n }\n const where: CmsEntryListWhere = {\n latest: true\n };\n if (lastDeletedId) {\n where.entryId_gte = lastDeletedId;\n }\n const { items, hasMoreItems: metaHasMoreItems } =\n await this.context.cms.storageOperations.entries.list(model, {\n limit: 1000,\n where,\n sort: [\"entryId_ASC\"]\n });\n for (const item of items) {\n try {\n await this.context.cms.deleteEntry(model, item.id, {\n permanently: true,\n force: true\n });\n } catch (ex) {\n console.error(\"Failed to delete entry.\", {\n model: model.modelId,\n id: item.id\n });\n return this.response.error(\n new Error(`Failed to delete entry \"${item.id}\". Cannot continue.`)\n );\n }\n lastDeletedId = item.entryId;\n }\n\n hasMoreItems = metaHasMoreItems;\n } while (hasMoreItems);\n /**\n * Let's do one more check. If there are items, continue the task with 5 seconds delay.\n */\n const { items } = await this.context.cms.storageOperations.entries.list(model, {\n limit: 1,\n where: {\n latest: true\n }\n });\n if (items.length > 0) {\n console.log(\"There are still items to be deleted. Continuing the task.\");\n return this.response.continue(\n {\n ...input\n },\n {\n seconds: 5\n }\n );\n }\n\n let hasMoreFolders = false;\n do {\n const [items, meta] = await this.context.aco.folder.list({\n where: {\n type: `cms:${model.modelId}`\n },\n limit: 1000\n });\n for (const item of items) {\n try {\n await this.context.aco.folder.delete(item.id);\n } catch (ex) {\n console.error(`Failed to delete folder \"${item.id}\".`, ex);\n return this.response.error(ex);\n }\n }\n\n hasMoreFolders = meta.hasMoreItems;\n } while (hasMoreFolders);\n\n /**\n * When there is no more records to be deleted, let's delete the model, if it's not a plugin.\n */\n await this.removeBeingDeleted(model);\n if (model.isPlugin) {\n return this.response.done();\n }\n try {\n await this.context.cms.deleteModel(model.modelId);\n } catch (ex) {\n const message = `Failed to delete model \"${model.modelId}\".`;\n console.error(message);\n return this.response.error(ex);\n }\n\n return this.response.done();\n }\n\n private async getModel(modelId: string): Promise<CmsModel> {\n const model = await this.context.cms.getModel(modelId);\n if (!model) {\n throw new Error(`Model \"${modelId}\" not found.`);\n }\n return model;\n }\n\n private async removeBeingDeleted(\n model: Pick<CmsModel, \"modelId\" | \"tenant\" | \"locale\">\n ): Promise<void> {\n const key = createStoreKey(model);\n await this.context.db.store.removeValue(key);\n }\n}\n\nexport const createDeleteModelRunner = <\n C extends HcmsTasksContext,\n I extends IDeleteModelTaskInput,\n O extends IDeleteModelTaskOutput\n>(\n params: IDeleteModelRunnerParams<C, I, O>\n) => {\n return new DeleteModelRunner<C, I, O>(params);\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const DELETE_MODEL_TASK = "deleteModelAndEntries";
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DELETE_MODEL_TASK = void 0;
7
+ const DELETE_MODEL_TASK = exports.DELETE_MODEL_TASK = "deleteModelAndEntries";
8
+
9
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DELETE_MODEL_TASK","exports"],"sources":["constants.ts"],"sourcesContent":["export const DELETE_MODEL_TASK = \"deleteModelAndEntries\";\n"],"mappings":";;;;;;AAAO,MAAMA,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAAG,uBAAuB","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import { HcmsTasksContext } from "../../../types";
2
+ export interface IAttachLifecycleEventsParams {
3
+ context: HcmsTasksContext;
4
+ }
5
+ export declare const attachLifecycleEvents: ({ context }: IAttachLifecycleEventsParams) => void;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.attachLifecycleEvents = void 0;
7
+ var _error = require("@webiny/error");
8
+ const attachLifecycleEvents = ({
9
+ context
10
+ }) => {
11
+ const blockActionOnEvent = async params => {
12
+ const {
13
+ model
14
+ } = params;
15
+ const isBeingDeleted = await context.cms.isModelBeingDeleted(model.modelId);
16
+ if (!isBeingDeleted) {
17
+ return;
18
+ }
19
+ throw new _error.WebinyError(`Model "${model.name}" is being deleted and you cannot create, update or delete any entries of this model.`);
20
+ };
21
+ /**
22
+ * Entry actions.
23
+ */
24
+ context.cms.onEntryBeforeCreate.subscribe(blockActionOnEvent);
25
+ context.cms.onEntryRevisionBeforeCreate.subscribe(blockActionOnEvent);
26
+ context.cms.onEntryBeforeUpdate.subscribe(blockActionOnEvent);
27
+ context.cms.onEntryBeforeUnpublish.subscribe(blockActionOnEvent);
28
+ context.cms.onEntryBeforePublish.subscribe(blockActionOnEvent);
29
+ context.cms.onEntryBeforeRepublish.subscribe(blockActionOnEvent);
30
+ context.cms.onEntryBeforeRestoreFromBin.subscribe(blockActionOnEvent);
31
+ context.cms.onEntryBeforeMove.subscribe(blockActionOnEvent);
32
+ /**
33
+ * Model actions.
34
+ */
35
+ context.cms.onModelBeforeUpdate.subscribe(blockActionOnEvent);
36
+ context.cms.onModelBeforeCreateFrom.subscribe(blockActionOnEvent);
37
+ };
38
+ exports.attachLifecycleEvents = attachLifecycleEvents;
39
+
40
+ //# sourceMappingURL=attachLifecycleEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_error","require","attachLifecycleEvents","context","blockActionOnEvent","params","model","isBeingDeleted","cms","isModelBeingDeleted","modelId","WebinyError","name","onEntryBeforeCreate","subscribe","onEntryRevisionBeforeCreate","onEntryBeforeUpdate","onEntryBeforeUnpublish","onEntryBeforePublish","onEntryBeforeRepublish","onEntryBeforeRestoreFromBin","onEntryBeforeMove","onModelBeforeUpdate","onModelBeforeCreateFrom","exports"],"sources":["attachLifecycleEvents.ts"],"sourcesContent":["import { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { WebinyError } from \"@webiny/error\";\nimport { HcmsTasksContext } from \"~/types\";\n\nexport interface IAttachLifecycleEventsParams {\n context: HcmsTasksContext;\n}\n\ninterface ICbParams {\n model: Pick<CmsModel, \"modelId\" | \"name\">;\n}\n\nexport const attachLifecycleEvents = ({ context }: IAttachLifecycleEventsParams): void => {\n const blockActionOnEvent = async (params: ICbParams): Promise<void> => {\n const { model } = params;\n const isBeingDeleted = await context.cms.isModelBeingDeleted(model.modelId);\n if (!isBeingDeleted) {\n return;\n }\n\n throw new WebinyError(\n `Model \"${model.name}\" is being deleted and you cannot create, update or delete any entries of this model.`\n );\n };\n /**\n * Entry actions.\n */\n context.cms.onEntryBeforeCreate.subscribe(blockActionOnEvent);\n\n context.cms.onEntryRevisionBeforeCreate.subscribe(blockActionOnEvent);\n\n context.cms.onEntryBeforeUpdate.subscribe(blockActionOnEvent);\n\n context.cms.onEntryBeforeUnpublish.subscribe(blockActionOnEvent);\n\n context.cms.onEntryBeforePublish.subscribe(blockActionOnEvent);\n\n context.cms.onEntryBeforeRepublish.subscribe(blockActionOnEvent);\n\n context.cms.onEntryBeforeRestoreFromBin.subscribe(blockActionOnEvent);\n\n context.cms.onEntryBeforeMove.subscribe(blockActionOnEvent);\n /**\n * Model actions.\n */\n context.cms.onModelBeforeUpdate.subscribe(blockActionOnEvent);\n\n context.cms.onModelBeforeCreateFrom.subscribe(blockActionOnEvent);\n};\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAWO,MAAMC,qBAAqB,GAAGA,CAAC;EAAEC;AAAsC,CAAC,KAAW;EACtF,MAAMC,kBAAkB,GAAG,MAAOC,MAAiB,IAAoB;IACnE,MAAM;MAAEC;IAAM,CAAC,GAAGD,MAAM;IACxB,MAAME,cAAc,GAAG,MAAMJ,OAAO,CAACK,GAAG,CAACC,mBAAmB,CAACH,KAAK,CAACI,OAAO,CAAC;IAC3E,IAAI,CAACH,cAAc,EAAE;MACjB;IACJ;IAEA,MAAM,IAAII,kBAAW,CACjB,UAAUL,KAAK,CAACM,IAAI,uFACxB,CAAC;EACL,CAAC;EACD;AACJ;AACA;EACIT,OAAO,CAACK,GAAG,CAACK,mBAAmB,CAACC,SAAS,CAACV,kBAAkB,CAAC;EAE7DD,OAAO,CAACK,GAAG,CAACO,2BAA2B,CAACD,SAAS,CAACV,kBAAkB,CAAC;EAErED,OAAO,CAACK,GAAG,CAACQ,mBAAmB,CAACF,SAAS,CAACV,kBAAkB,CAAC;EAE7DD,OAAO,CAACK,GAAG,CAACS,sBAAsB,CAACH,SAAS,CAACV,kBAAkB,CAAC;EAEhED,OAAO,CAACK,GAAG,CAACU,oBAAoB,CAACJ,SAAS,CAACV,kBAAkB,CAAC;EAE9DD,OAAO,CAACK,GAAG,CAACW,sBAAsB,CAACL,SAAS,CAACV,kBAAkB,CAAC;EAEhED,OAAO,CAACK,GAAG,CAACY,2BAA2B,CAACN,SAAS,CAACV,kBAAkB,CAAC;EAErED,OAAO,CAACK,GAAG,CAACa,iBAAiB,CAACP,SAAS,CAACV,kBAAkB,CAAC;EAC3D;AACJ;AACA;EACID,OAAO,CAACK,GAAG,CAACc,mBAAmB,CAACR,SAAS,CAACV,kBAAkB,CAAC;EAE7DD,OAAO,CAACK,GAAG,CAACe,uBAAuB,CAACT,SAAS,CAACV,kBAAkB,CAAC;AACrE,CAAC;AAACoB,OAAA,CAAAtB,qBAAA,GAAAA,qBAAA","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import type { HcmsTasksContext } from "../../../types";
2
+ import type { IDeleteCmsModelTask } from "../types";
3
+ export interface ICancelDeleteModelParams {
4
+ readonly context: Pick<HcmsTasksContext, "cms" | "tasks" | "db">;
5
+ readonly modelId: string;
6
+ }
7
+ export declare const cancelDeleteModel: (params: ICancelDeleteModelParams) => Promise<IDeleteCmsModelTask>;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.cancelDeleteModel = void 0;
7
+ var _constants = require("../constants");
8
+ var _error = require("@webiny/error");
9
+ var _status = require("./status");
10
+ var _store = require("../helpers/store");
11
+ const cancelDeleteModel = async params => {
12
+ const {
13
+ context,
14
+ modelId
15
+ } = params;
16
+ const model = await context.cms.getModel(modelId);
17
+ await context.cms.accessControl.ensureCanAccessModel({
18
+ model,
19
+ rwd: "d"
20
+ });
21
+ await context.cms.accessControl.ensureCanAccessEntry({
22
+ model,
23
+ rwd: "w"
24
+ });
25
+ const storeKey = (0, _store.createStoreKey)(model);
26
+ const result = await context.db.store.getValue(storeKey);
27
+ const taskId = result.data?.task;
28
+ await context.db.store.removeValue(storeKey);
29
+ if (!taskId) {
30
+ if (result.error) {
31
+ throw _error.WebinyError.from(result.error, {
32
+ code: "DELETE_MODEL_NO_TASK_DEFINED"
33
+ });
34
+ }
35
+ throw new _error.WebinyError({
36
+ message: `Model "${modelId}" is not being deleted.`,
37
+ code: "MODEL_NOT_BEING_DELETED"
38
+ });
39
+ }
40
+ const task = await context.tasks.getTask(taskId);
41
+ if (task?.definitionId !== _constants.DELETE_MODEL_TASK) {
42
+ throw new _error.WebinyError({
43
+ message: `The task which is deleting a model cannot be found. Please check Step Functions for more info. Task id: ${taskId}`,
44
+ code: "DELETE_MODEL_TASK_NOT_FOUND",
45
+ data: {
46
+ model: model.modelId,
47
+ task: taskId
48
+ }
49
+ });
50
+ }
51
+ const canceledTask = await context.tasks.abort({
52
+ id: task.id,
53
+ message: "User canceled the task."
54
+ });
55
+ return {
56
+ id: canceledTask.id,
57
+ status: (0, _status.getStatus)(canceledTask.taskStatus),
58
+ total: canceledTask.output?.total || 0,
59
+ deleted: canceledTask.output?.deleted || 0
60
+ };
61
+ };
62
+ exports.cancelDeleteModel = cancelDeleteModel;
63
+
64
+ //# sourceMappingURL=cancelDeleteModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_constants","require","_error","_status","_store","cancelDeleteModel","params","context","modelId","model","cms","getModel","accessControl","ensureCanAccessModel","rwd","ensureCanAccessEntry","storeKey","createStoreKey","result","db","store","getValue","taskId","data","task","removeValue","error","WebinyError","from","code","message","tasks","getTask","definitionId","DELETE_MODEL_TASK","canceledTask","abort","id","status","getStatus","taskStatus","total","output","deleted","exports"],"sources":["cancelDeleteModel.ts"],"sourcesContent":["import type { HcmsTasksContext } from \"~/types\";\nimport type {\n IDeleteCmsModelTask,\n IDeleteModelTaskInput,\n IDeleteModelTaskOutput,\n IStoreValue\n} from \"~/tasks/deleteModel/types\";\nimport { DELETE_MODEL_TASK } from \"~/tasks/deleteModel/constants\";\nimport { WebinyError } from \"@webiny/error\";\nimport { getStatus } from \"~/tasks/deleteModel/graphql/status\";\nimport { createStoreKey } from \"~/tasks/deleteModel/helpers/store\";\n\nexport interface ICancelDeleteModelParams {\n readonly context: Pick<HcmsTasksContext, \"cms\" | \"tasks\" | \"db\">;\n readonly modelId: string;\n}\n\nexport const cancelDeleteModel = async (\n params: ICancelDeleteModelParams\n): Promise<IDeleteCmsModelTask> => {\n const { context, modelId } = params;\n\n const model = await context.cms.getModel(modelId);\n\n await context.cms.accessControl.ensureCanAccessModel({\n model,\n rwd: \"d\"\n });\n\n await context.cms.accessControl.ensureCanAccessEntry({\n model,\n rwd: \"w\"\n });\n\n const storeKey = createStoreKey(model);\n\n const result = await context.db.store.getValue<IStoreValue>(storeKey);\n\n const taskId = result.data?.task;\n\n await context.db.store.removeValue(storeKey);\n if (!taskId) {\n if (result.error) {\n throw WebinyError.from(result.error, {\n code: \"DELETE_MODEL_NO_TASK_DEFINED\"\n });\n }\n throw new WebinyError({\n message: `Model \"${modelId}\" is not being deleted.`,\n code: \"MODEL_NOT_BEING_DELETED\"\n });\n }\n\n const task = await context.tasks.getTask<IDeleteModelTaskInput, IDeleteModelTaskOutput>(taskId);\n if (task?.definitionId !== DELETE_MODEL_TASK) {\n throw new WebinyError({\n message: `The task which is deleting a model cannot be found. Please check Step Functions for more info. Task id: ${taskId}`,\n code: \"DELETE_MODEL_TASK_NOT_FOUND\",\n data: {\n model: model.modelId,\n task: taskId\n }\n });\n }\n\n const canceledTask = await context.tasks.abort<IDeleteModelTaskInput, IDeleteModelTaskOutput>({\n id: task.id,\n message: \"User canceled the task.\"\n });\n\n return {\n id: canceledTask.id,\n status: getStatus(canceledTask.taskStatus),\n total: canceledTask.output?.total || 0,\n deleted: canceledTask.output?.deleted || 0\n };\n};\n"],"mappings":";;;;;;AAOA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAOO,MAAMI,iBAAiB,GAAG,MAC7BC,MAAgC,IACD;EAC/B,MAAM;IAAEC,OAAO;IAAEC;EAAQ,CAAC,GAAGF,MAAM;EAEnC,MAAMG,KAAK,GAAG,MAAMF,OAAO,CAACG,GAAG,CAACC,QAAQ,CAACH,OAAO,CAAC;EAEjD,MAAMD,OAAO,CAACG,GAAG,CAACE,aAAa,CAACC,oBAAoB,CAAC;IACjDJ,KAAK;IACLK,GAAG,EAAE;EACT,CAAC,CAAC;EAEF,MAAMP,OAAO,CAACG,GAAG,CAACE,aAAa,CAACG,oBAAoB,CAAC;IACjDN,KAAK;IACLK,GAAG,EAAE;EACT,CAAC,CAAC;EAEF,MAAME,QAAQ,GAAG,IAAAC,qBAAc,EAACR,KAAK,CAAC;EAEtC,MAAMS,MAAM,GAAG,MAAMX,OAAO,CAACY,EAAE,CAACC,KAAK,CAACC,QAAQ,CAAcL,QAAQ,CAAC;EAErE,MAAMM,MAAM,GAAGJ,MAAM,CAACK,IAAI,EAAEC,IAAI;EAEhC,MAAMjB,OAAO,CAACY,EAAE,CAACC,KAAK,CAACK,WAAW,CAACT,QAAQ,CAAC;EAC5C,IAAI,CAACM,MAAM,EAAE;IACT,IAAIJ,MAAM,CAACQ,KAAK,EAAE;MACd,MAAMC,kBAAW,CAACC,IAAI,CAACV,MAAM,CAACQ,KAAK,EAAE;QACjCG,IAAI,EAAE;MACV,CAAC,CAAC;IACN;IACA,MAAM,IAAIF,kBAAW,CAAC;MAClBG,OAAO,EAAE,UAAUtB,OAAO,yBAAyB;MACnDqB,IAAI,EAAE;IACV,CAAC,CAAC;EACN;EAEA,MAAML,IAAI,GAAG,MAAMjB,OAAO,CAACwB,KAAK,CAACC,OAAO,CAAgDV,MAAM,CAAC;EAC/F,IAAIE,IAAI,EAAES,YAAY,KAAKC,4BAAiB,EAAE;IAC1C,MAAM,IAAIP,kBAAW,CAAC;MAClBG,OAAO,EAAE,2GAA2GR,MAAM,EAAE;MAC5HO,IAAI,EAAE,6BAA6B;MACnCN,IAAI,EAAE;QACFd,KAAK,EAAEA,KAAK,CAACD,OAAO;QACpBgB,IAAI,EAAEF;MACV;IACJ,CAAC,CAAC;EACN;EAEA,MAAMa,YAAY,GAAG,MAAM5B,OAAO,CAACwB,KAAK,CAACK,KAAK,CAAgD;IAC1FC,EAAE,EAAEb,IAAI,CAACa,EAAE;IACXP,OAAO,EAAE;EACb,CAAC,CAAC;EAEF,OAAO;IACHO,EAAE,EAAEF,YAAY,CAACE,EAAE;IACnBC,MAAM,EAAE,IAAAC,iBAAS,EAACJ,YAAY,CAACK,UAAU,CAAC;IAC1CC,KAAK,EAAEN,YAAY,CAACO,MAAM,EAAED,KAAK,IAAI,CAAC;IACtCE,OAAO,EAAER,YAAY,CAACO,MAAM,EAAEC,OAAO,IAAI;EAC7C,CAAC;AACL,CAAC;AAACC,OAAA,CAAAvC,iBAAA,GAAAA,iBAAA","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import type { HcmsTasksContext } from "../../../types";
2
+ import { ContextPlugin } from "@webiny/api";
3
+ export declare const createDeleteModelCrud: () => ContextPlugin<HcmsTasksContext>;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createDeleteModelCrud = void 0;
7
+ var _fullyDeleteModel = require("./fullyDeleteModel");
8
+ var _cancelDeleteModel = require("./cancelDeleteModel");
9
+ var _getDeleteModelProgress = require("./getDeleteModelProgress");
10
+ var _utils = require("@webiny/api-headless-cms/utils");
11
+ var _store = require("../helpers/store");
12
+ var _api = require("@webiny/api");
13
+ var _attachLifecycleEvents = require("./attachLifecycleEvents");
14
+ const createDeleteModelCrud = () => {
15
+ const plugin = new _api.ContextPlugin(async context => {
16
+ (0, _attachLifecycleEvents.attachLifecycleEvents)({
17
+ context
18
+ });
19
+ const getLocale = () => {
20
+ return context.cms.getLocale().code;
21
+ };
22
+ const getTenant = () => {
23
+ return context.tenancy.getCurrentTenant().id;
24
+ };
25
+ const cache = (0, _utils.createMemoryCache)();
26
+ context.cms.listModelsBeingDeleted = async () => {
27
+ const locale = getLocale();
28
+ const tenant = getTenant();
29
+ const cacheKey = (0, _utils.createCacheKey)({
30
+ tenant: getTenant(),
31
+ locale: getLocale(),
32
+ type: "deleteModel"
33
+ });
34
+ const result = await cache.getOrSet(cacheKey, async () => {
35
+ const beginsWith = (0, _store.createStoreNamespace)({
36
+ tenant,
37
+ locale
38
+ });
39
+ return await context.db.store.listValues({
40
+ beginsWith
41
+ });
42
+ });
43
+ if (result.error) {
44
+ throw result.error;
45
+ } else if (!result.data) {
46
+ return [];
47
+ }
48
+ return Object.values(result.data);
49
+ };
50
+ context.cms.isModelBeingDeleted = async modelId => {
51
+ const items = await context.cms.listModelsBeingDeleted();
52
+ return items.some(item => item.modelId === modelId);
53
+ };
54
+ context.cms.fullyDeleteModel = async modelId => {
55
+ const result = await (0, _fullyDeleteModel.fullyDeleteModel)({
56
+ context,
57
+ modelId
58
+ });
59
+ cache.clear();
60
+ return result;
61
+ };
62
+ context.cms.cancelFullyDeleteModel = async modelId => {
63
+ const result = await (0, _cancelDeleteModel.cancelDeleteModel)({
64
+ context,
65
+ modelId
66
+ });
67
+ cache.clear();
68
+ return result;
69
+ };
70
+ context.cms.getDeleteModelProgress = async modelId => {
71
+ return await (0, _getDeleteModelProgress.getDeleteModelProgress)({
72
+ context,
73
+ modelId
74
+ });
75
+ };
76
+ });
77
+ plugin.name = "headlessCms.context.cms.fullyDeleteModel";
78
+ return plugin;
79
+ };
80
+ exports.createDeleteModelCrud = createDeleteModelCrud;
81
+
82
+ //# sourceMappingURL=crud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_fullyDeleteModel","require","_cancelDeleteModel","_getDeleteModelProgress","_utils","_store","_api","_attachLifecycleEvents","createDeleteModelCrud","plugin","ContextPlugin","context","attachLifecycleEvents","getLocale","cms","code","getTenant","tenancy","getCurrentTenant","id","cache","createMemoryCache","listModelsBeingDeleted","locale","tenant","cacheKey","createCacheKey","type","result","getOrSet","beginsWith","createStoreNamespace","db","store","listValues","error","data","Object","values","isModelBeingDeleted","modelId","items","some","item","fullyDeleteModel","fullyDeleteModelMethod","clear","cancelFullyDeleteModel","cancelDeleteModel","getDeleteModelProgress","getDeleteModelProgressMethod","name","exports"],"sources":["crud.ts"],"sourcesContent":["import type { HcmsTasksContext } from \"~/types\";\nimport { fullyDeleteModel as fullyDeleteModelMethod } from \"./fullyDeleteModel\";\nimport { cancelDeleteModel } from \"./cancelDeleteModel\";\nimport { getDeleteModelProgress as getDeleteModelProgressMethod } from \"./getDeleteModelProgress\";\nimport { createCacheKey, createMemoryCache } from \"@webiny/api-headless-cms/utils\";\nimport type { IStoreValue, ListStoreKeysResult } from \"../types\";\nimport { createStoreNamespace } from \"~/tasks/deleteModel/helpers/store\";\nimport type { GenericRecord } from \"@webiny/api/types\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { attachLifecycleEvents } from \"./attachLifecycleEvents\";\n\nexport const createDeleteModelCrud = () => {\n const plugin = new ContextPlugin<HcmsTasksContext>(async context => {\n attachLifecycleEvents({\n context\n });\n const getLocale = (): string => {\n return context.cms.getLocale().code;\n };\n const getTenant = (): string => {\n return context.tenancy.getCurrentTenant().id;\n };\n\n const cache = createMemoryCache<ListStoreKeysResult>();\n\n context.cms.listModelsBeingDeleted = async () => {\n const locale = getLocale();\n const tenant = getTenant();\n const cacheKey = createCacheKey({\n tenant: getTenant(),\n locale: getLocale(),\n type: \"deleteModel\"\n });\n\n const result = await cache.getOrSet(cacheKey, async () => {\n const beginsWith = createStoreNamespace({\n tenant,\n locale\n });\n return await context.db.store.listValues<GenericRecord<string, IStoreValue>>({\n beginsWith\n });\n });\n\n if (result.error) {\n throw result.error;\n } else if (!result.data) {\n return [];\n }\n return Object.values(result.data);\n };\n\n context.cms.isModelBeingDeleted = async (modelId: string) => {\n const items = await context.cms.listModelsBeingDeleted();\n return items.some(item => item.modelId === modelId);\n };\n context.cms.fullyDeleteModel = async (modelId: string) => {\n const result = await fullyDeleteModelMethod({\n context,\n modelId\n });\n cache.clear();\n return result;\n };\n\n context.cms.cancelFullyDeleteModel = async (modelId: string) => {\n const result = await cancelDeleteModel({\n context,\n modelId\n });\n cache.clear();\n return result;\n };\n\n context.cms.getDeleteModelProgress = async (modelId: string) => {\n return await getDeleteModelProgressMethod({\n context,\n modelId\n });\n };\n });\n\n plugin.name = \"headlessCms.context.cms.fullyDeleteModel\";\n\n return plugin;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import type { HcmsTasksContext } from "../../../types";
2
+ import type { IDeleteCmsModelTask } from "../types";
3
+ export interface IFullyDeleteModelParams {
4
+ readonly context: Pick<HcmsTasksContext, "cms" | "tasks" | "db" | "security">;
5
+ readonly modelId: string;
6
+ }
7
+ export declare const fullyDeleteModel: (params: IFullyDeleteModelParams) => Promise<IDeleteCmsModelTask>;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.fullyDeleteModel = void 0;
7
+ var _constants = require("../constants");
8
+ var _status = require("./status");
9
+ var _store = require("../helpers/store");
10
+ const fullyDeleteModel = async params => {
11
+ const {
12
+ context,
13
+ modelId
14
+ } = params;
15
+ const model = await context.cms.getModel(modelId);
16
+ if (model.isPrivate) {
17
+ throw new Error(`Cannot delete private model.`);
18
+ }
19
+ await context.cms.accessControl.ensureCanAccessModel({
20
+ model,
21
+ rwd: "d"
22
+ });
23
+ await context.cms.accessControl.ensureCanAccessEntry({
24
+ model,
25
+ rwd: "w"
26
+ });
27
+ if (!model) {
28
+ throw new Error(`Model "${modelId}" not found.`);
29
+ }
30
+ const storeKey = (0, _store.createStoreKey)(model);
31
+ const result = await context.db.store.getValue(storeKey);
32
+ const taskId = result.data?.task;
33
+ if (taskId) {
34
+ throw new Error(`Model "${modelId}" is already getting deleted. Task id: ${taskId}.`);
35
+ }
36
+ const task = await context.tasks.trigger({
37
+ input: {
38
+ modelId
39
+ },
40
+ definition: _constants.DELETE_MODEL_TASK,
41
+ name: `Fully delete model: ${modelId}`
42
+ });
43
+ await context.db.store.storeValue(storeKey, (0, _store.createStoreValue)({
44
+ ...model,
45
+ identity: context.security.getIdentity(),
46
+ task: task.id
47
+ }));
48
+ return {
49
+ id: task.id,
50
+ status: (0, _status.getStatus)(task.taskStatus),
51
+ total: 0,
52
+ deleted: 0
53
+ };
54
+ };
55
+ exports.fullyDeleteModel = fullyDeleteModel;
56
+
57
+ //# sourceMappingURL=fullyDeleteModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_constants","require","_status","_store","fullyDeleteModel","params","context","modelId","model","cms","getModel","isPrivate","Error","accessControl","ensureCanAccessModel","rwd","ensureCanAccessEntry","storeKey","createStoreKey","result","db","store","getValue","taskId","data","task","tasks","trigger","input","definition","DELETE_MODEL_TASK","name","storeValue","createStoreValue","identity","security","getIdentity","id","status","getStatus","taskStatus","total","deleted","exports"],"sources":["fullyDeleteModel.ts"],"sourcesContent":["import type { HcmsTasksContext } from \"~/types\";\nimport { DELETE_MODEL_TASK } from \"~/tasks/deleteModel/constants\";\nimport type {\n IDeleteCmsModelTask,\n IDeleteModelTaskInput,\n IStoreValue\n} from \"~/tasks/deleteModel/types\";\nimport { getStatus } from \"~/tasks/deleteModel/graphql/status\";\nimport { createStoreKey, createStoreValue } from \"~/tasks/deleteModel/helpers/store\";\n\nexport interface IFullyDeleteModelParams {\n readonly context: Pick<HcmsTasksContext, \"cms\" | \"tasks\" | \"db\" | \"security\">;\n readonly modelId: string;\n}\n\nexport const fullyDeleteModel = async (\n params: IFullyDeleteModelParams\n): Promise<IDeleteCmsModelTask> => {\n const { context, modelId } = params;\n\n const model = await context.cms.getModel(modelId);\n\n if (model.isPrivate) {\n throw new Error(`Cannot delete private model.`);\n }\n\n await context.cms.accessControl.ensureCanAccessModel({\n model,\n rwd: \"d\"\n });\n\n await context.cms.accessControl.ensureCanAccessEntry({\n model,\n rwd: \"w\"\n });\n\n if (!model) {\n throw new Error(`Model \"${modelId}\" not found.`);\n }\n const storeKey = createStoreKey(model);\n const result = await context.db.store.getValue<IStoreValue>(storeKey);\n const taskId = result.data?.task;\n if (taskId) {\n throw new Error(`Model \"${modelId}\" is already getting deleted. Task id: ${taskId}.`);\n }\n\n const task = await context.tasks.trigger<IDeleteModelTaskInput>({\n input: {\n modelId\n },\n definition: DELETE_MODEL_TASK,\n name: `Fully delete model: ${modelId}`\n });\n\n await context.db.store.storeValue(\n storeKey,\n createStoreValue({\n ...model,\n identity: context.security.getIdentity(),\n task: task.id\n })\n );\n\n return {\n id: task.id,\n status: getStatus(task.taskStatus),\n total: 0,\n deleted: 0\n };\n};\n"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AAMA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAOO,MAAMG,gBAAgB,GAAG,MAC5BC,MAA+B,IACA;EAC/B,MAAM;IAAEC,OAAO;IAAEC;EAAQ,CAAC,GAAGF,MAAM;EAEnC,MAAMG,KAAK,GAAG,MAAMF,OAAO,CAACG,GAAG,CAACC,QAAQ,CAACH,OAAO,CAAC;EAEjD,IAAIC,KAAK,CAACG,SAAS,EAAE;IACjB,MAAM,IAAIC,KAAK,CAAC,8BAA8B,CAAC;EACnD;EAEA,MAAMN,OAAO,CAACG,GAAG,CAACI,aAAa,CAACC,oBAAoB,CAAC;IACjDN,KAAK;IACLO,GAAG,EAAE;EACT,CAAC,CAAC;EAEF,MAAMT,OAAO,CAACG,GAAG,CAACI,aAAa,CAACG,oBAAoB,CAAC;IACjDR,KAAK;IACLO,GAAG,EAAE;EACT,CAAC,CAAC;EAEF,IAAI,CAACP,KAAK,EAAE;IACR,MAAM,IAAII,KAAK,CAAC,UAAUL,OAAO,cAAc,CAAC;EACpD;EACA,MAAMU,QAAQ,GAAG,IAAAC,qBAAc,EAACV,KAAK,CAAC;EACtC,MAAMW,MAAM,GAAG,MAAMb,OAAO,CAACc,EAAE,CAACC,KAAK,CAACC,QAAQ,CAAcL,QAAQ,CAAC;EACrE,MAAMM,MAAM,GAAGJ,MAAM,CAACK,IAAI,EAAEC,IAAI;EAChC,IAAIF,MAAM,EAAE;IACR,MAAM,IAAIX,KAAK,CAAC,UAAUL,OAAO,0CAA0CgB,MAAM,GAAG,CAAC;EACzF;EAEA,MAAME,IAAI,GAAG,MAAMnB,OAAO,CAACoB,KAAK,CAACC,OAAO,CAAwB;IAC5DC,KAAK,EAAE;MACHrB;IACJ,CAAC;IACDsB,UAAU,EAAEC,4BAAiB;IAC7BC,IAAI,EAAE,uBAAuBxB,OAAO;EACxC,CAAC,CAAC;EAEF,MAAMD,OAAO,CAACc,EAAE,CAACC,KAAK,CAACW,UAAU,CAC7Bf,QAAQ,EACR,IAAAgB,uBAAgB,EAAC;IACb,GAAGzB,KAAK;IACR0B,QAAQ,EAAE5B,OAAO,CAAC6B,QAAQ,CAACC,WAAW,CAAC,CAAC;IACxCX,IAAI,EAAEA,IAAI,CAACY;EACf,CAAC,CACL,CAAC;EAED,OAAO;IACHA,EAAE,EAAEZ,IAAI,CAACY,EAAE;IACXC,MAAM,EAAE,IAAAC,iBAAS,EAACd,IAAI,CAACe,UAAU,CAAC;IAClCC,KAAK,EAAE,CAAC;IACRC,OAAO,EAAE;EACb,CAAC;AACL,CAAC;AAACC,OAAA,CAAAvC,gBAAA,GAAAA,gBAAA","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import type { IDeleteCmsModelTask } from "../types";
2
+ import type { HcmsTasksContext } from "../../../types";
3
+ export interface IGetDeleteModelProgress {
4
+ readonly context: Pick<HcmsTasksContext, "cms" | "tasks" | "db">;
5
+ readonly modelId: string;
6
+ }
7
+ export declare const getDeleteModelProgress: (params: IGetDeleteModelProgress) => Promise<IDeleteCmsModelTask>;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getDeleteModelProgress = void 0;
7
+ var _constants = require("../constants");
8
+ var _error = require("@webiny/error");
9
+ var _status = require("./status");
10
+ var _handlerGraphql = require("@webiny/handler-graphql");
11
+ var _store = require("../helpers/store");
12
+ const getDeleteModelProgress = async params => {
13
+ const {
14
+ context,
15
+ modelId
16
+ } = params;
17
+ let model;
18
+ try {
19
+ model = await context.cms.getModel(modelId);
20
+ } catch (ex) {
21
+ if (ex instanceof _handlerGraphql.NotFoundError === false) {
22
+ throw ex;
23
+ }
24
+ throw new _error.WebinyError({
25
+ message: "Model not found. It must have been deleted already.",
26
+ code: "MODEL_ALREADY_DELETED_FOUND",
27
+ data: {
28
+ model: modelId
29
+ }
30
+ });
31
+ }
32
+ await context.cms.accessControl.ensureCanAccessModel({
33
+ model,
34
+ rwd: "d"
35
+ });
36
+ await context.cms.accessControl.ensureCanAccessEntry({
37
+ model,
38
+ rwd: "w"
39
+ });
40
+ const storeKey = (0, _store.createStoreKey)(model);
41
+ const result = await context.db.store.getValue(storeKey);
42
+ const taskId = result.data?.task;
43
+ if (!taskId) {
44
+ throw new Error(`Model "${modelId}" is not being deleted.`);
45
+ }
46
+ const task = await context.tasks.getTask(taskId);
47
+ if (task?.definitionId !== _constants.DELETE_MODEL_TASK) {
48
+ throw new _error.WebinyError({
49
+ message: `The task which is deleting a model cannot be found.`,
50
+ code: "DELETE_MODEL_TASK_NOT_FOUND",
51
+ data: {
52
+ model: model.modelId,
53
+ task: taskId
54
+ }
55
+ });
56
+ }
57
+ return {
58
+ id: task.id,
59
+ status: (0, _status.getStatus)(task.taskStatus),
60
+ total: task.output?.total || 0,
61
+ deleted: task.output?.deleted || 0
62
+ };
63
+ };
64
+ exports.getDeleteModelProgress = getDeleteModelProgress;
65
+
66
+ //# sourceMappingURL=getDeleteModelProgress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_constants","require","_error","_status","_handlerGraphql","_store","getDeleteModelProgress","params","context","modelId","model","cms","getModel","ex","NotFoundError","WebinyError","message","code","data","accessControl","ensureCanAccessModel","rwd","ensureCanAccessEntry","storeKey","createStoreKey","result","db","store","getValue","taskId","task","Error","tasks","getTask","definitionId","DELETE_MODEL_TASK","id","status","getStatus","taskStatus","total","output","deleted","exports"],"sources":["getDeleteModelProgress.ts"],"sourcesContent":["import type {\n IDeleteCmsModelTask,\n IDeleteModelTaskInput,\n IDeleteModelTaskOutput,\n IStoreValue\n} from \"~/tasks/deleteModel/types\";\nimport type { HcmsTasksContext } from \"~/types\";\nimport { DELETE_MODEL_TASK } from \"~/tasks/deleteModel/constants\";\nimport { WebinyError } from \"@webiny/error\";\nimport { getStatus } from \"~/tasks/deleteModel/graphql/status\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { createStoreKey } from \"../helpers/store\";\n\nexport interface IGetDeleteModelProgress {\n readonly context: Pick<HcmsTasksContext, \"cms\" | \"tasks\" | \"db\">;\n readonly modelId: string;\n}\n\nexport const getDeleteModelProgress = async (\n params: IGetDeleteModelProgress\n): Promise<IDeleteCmsModelTask> => {\n const { context, modelId } = params;\n\n let model: CmsModel;\n try {\n model = await context.cms.getModel(modelId);\n } catch (ex) {\n if (ex instanceof NotFoundError === false) {\n throw ex;\n }\n throw new WebinyError({\n message: \"Model not found. It must have been deleted already.\",\n code: \"MODEL_ALREADY_DELETED_FOUND\",\n data: {\n model: modelId\n }\n });\n }\n\n await context.cms.accessControl.ensureCanAccessModel({\n model,\n rwd: \"d\"\n });\n\n await context.cms.accessControl.ensureCanAccessEntry({\n model,\n rwd: \"w\"\n });\n\n const storeKey = createStoreKey(model);\n const result = await context.db.store.getValue<IStoreValue>(storeKey);\n\n const taskId = result.data?.task;\n if (!taskId) {\n throw new Error(`Model \"${modelId}\" is not being deleted.`);\n }\n\n const task = await context.tasks.getTask<IDeleteModelTaskInput, IDeleteModelTaskOutput>(taskId);\n if (task?.definitionId !== DELETE_MODEL_TASK) {\n throw new WebinyError({\n message: `The task which is deleting a model cannot be found.`,\n code: \"DELETE_MODEL_TASK_NOT_FOUND\",\n data: {\n model: model.modelId,\n task: taskId\n }\n });\n }\n return {\n id: task.id,\n status: getStatus(task.taskStatus),\n total: task.output?.total || 0,\n deleted: task.output?.deleted || 0\n };\n};\n"],"mappings":";;;;;;AAOA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAH,OAAA;AAEA,IAAAI,MAAA,GAAAJ,OAAA;AAOO,MAAMK,sBAAsB,GAAG,MAClCC,MAA+B,IACA;EAC/B,MAAM;IAAEC,OAAO;IAAEC;EAAQ,CAAC,GAAGF,MAAM;EAEnC,IAAIG,KAAe;EACnB,IAAI;IACAA,KAAK,GAAG,MAAMF,OAAO,CAACG,GAAG,CAACC,QAAQ,CAACH,OAAO,CAAC;EAC/C,CAAC,CAAC,OAAOI,EAAE,EAAE;IACT,IAAIA,EAAE,YAAYC,6BAAa,KAAK,KAAK,EAAE;MACvC,MAAMD,EAAE;IACZ;IACA,MAAM,IAAIE,kBAAW,CAAC;MAClBC,OAAO,EAAE,qDAAqD;MAC9DC,IAAI,EAAE,6BAA6B;MACnCC,IAAI,EAAE;QACFR,KAAK,EAAED;MACX;IACJ,CAAC,CAAC;EACN;EAEA,MAAMD,OAAO,CAACG,GAAG,CAACQ,aAAa,CAACC,oBAAoB,CAAC;IACjDV,KAAK;IACLW,GAAG,EAAE;EACT,CAAC,CAAC;EAEF,MAAMb,OAAO,CAACG,GAAG,CAACQ,aAAa,CAACG,oBAAoB,CAAC;IACjDZ,KAAK;IACLW,GAAG,EAAE;EACT,CAAC,CAAC;EAEF,MAAME,QAAQ,GAAG,IAAAC,qBAAc,EAACd,KAAK,CAAC;EACtC,MAAMe,MAAM,GAAG,MAAMjB,OAAO,CAACkB,EAAE,CAACC,KAAK,CAACC,QAAQ,CAAcL,QAAQ,CAAC;EAErE,MAAMM,MAAM,GAAGJ,MAAM,CAACP,IAAI,EAAEY,IAAI;EAChC,IAAI,CAACD,MAAM,EAAE;IACT,MAAM,IAAIE,KAAK,CAAC,UAAUtB,OAAO,yBAAyB,CAAC;EAC/D;EAEA,MAAMqB,IAAI,GAAG,MAAMtB,OAAO,CAACwB,KAAK,CAACC,OAAO,CAAgDJ,MAAM,CAAC;EAC/F,IAAIC,IAAI,EAAEI,YAAY,KAAKC,4BAAiB,EAAE;IAC1C,MAAM,IAAIpB,kBAAW,CAAC;MAClBC,OAAO,EAAE,qDAAqD;MAC9DC,IAAI,EAAE,6BAA6B;MACnCC,IAAI,EAAE;QACFR,KAAK,EAAEA,KAAK,CAACD,OAAO;QACpBqB,IAAI,EAAED;MACV;IACJ,CAAC,CAAC;EACN;EACA,OAAO;IACHO,EAAE,EAAEN,IAAI,CAACM,EAAE;IACXC,MAAM,EAAE,IAAAC,iBAAS,EAACR,IAAI,CAACS,UAAU,CAAC;IAClCC,KAAK,EAAEV,IAAI,CAACW,MAAM,EAAED,KAAK,IAAI,CAAC;IAC9BE,OAAO,EAAEZ,IAAI,CAACW,MAAM,EAAEC,OAAO,IAAI;EACrC,CAAC;AACL,CAAC;AAACC,OAAA,CAAArC,sBAAA,GAAAA,sBAAA","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import { ContextPlugin } from "@webiny/api";
2
+ import type { HcmsTasksContext } from "../../../types";
3
+ export declare const createDeleteModelGraphQl: <T extends HcmsTasksContext = HcmsTasksContext>() => ContextPlugin<T>;
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createDeleteModelGraphQl = void 0;
8
+ var _zod = _interopRequireDefault(require("zod"));
9
+ var _api = require("@webiny/api");
10
+ var _apiHeadlessCms = require("@webiny/api-headless-cms");
11
+ var _confirmation = require("../helpers/confirmation");
12
+ var _handlerGraphql = require("@webiny/handler-graphql");
13
+ var _utils = require("@webiny/utils");
14
+ const deleteValidation = _zod.default.object({
15
+ modelId: _zod.default.string(),
16
+ confirmation: _zod.default.string()
17
+ }).superRefine((value, context) => {
18
+ if ((0, _confirmation.validateConfirmation)(value)) {
19
+ return;
20
+ }
21
+ context.addIssue({
22
+ code: _zod.default.ZodIssueCode.custom,
23
+ message: `Confirmation input does not match.`,
24
+ fatal: true,
25
+ path: ["confirmation"]
26
+ });
27
+ }).readonly();
28
+ const cancelValidation = _zod.default.object({
29
+ modelId: _zod.default.string()
30
+ }).readonly();
31
+ const getValidation = _zod.default.object({
32
+ modelId: _zod.default.string()
33
+ }).readonly();
34
+ const createDeleteModelGraphQl = () => {
35
+ const contextPlugin = new _api.ContextPlugin(async inputContext => {
36
+ const ready = await (0, _apiHeadlessCms.isHeadlessCmsReady)(inputContext);
37
+ if (!ready || !inputContext.cms.MANAGE) {
38
+ return;
39
+ }
40
+ const plugin = new _apiHeadlessCms.CmsGraphQLSchemaPlugin({
41
+ typeDefs: /* GraphQL */`
42
+ enum DeleteCmsModelTaskStatus {
43
+ running
44
+ done
45
+ error
46
+ canceled
47
+ }
48
+ type DeleteCmsModelTask {
49
+ id: ID!
50
+ status: DeleteCmsModelTaskStatus!
51
+ deleted: Int!
52
+ total: Int!
53
+ }
54
+
55
+ type GetDeleteCmsModelProgressResponse {
56
+ data: DeleteCmsModelTask
57
+ error: CmsError
58
+ }
59
+
60
+ type FullyDeleteCmsModelResponse {
61
+ data: DeleteCmsModelTask
62
+ error: CmsError
63
+ }
64
+
65
+ type CancelDeleteCmsModelResponse {
66
+ data: DeleteCmsModelTask
67
+ error: CmsError
68
+ }
69
+
70
+ extend type CmsContentModel {
71
+ isBeingDeleted: Boolean!
72
+ }
73
+
74
+ extend type Query {
75
+ getDeleteModelProgress(modelId: ID!): GetDeleteCmsModelProgressResponse!
76
+ listContentModels(
77
+ includeBeingDeleted: Boolean = false
78
+ ): CmsContentModelListResponse
79
+ }
80
+
81
+ extend type Mutation {
82
+ fullyDeleteModel(
83
+ modelId: ID!
84
+ confirmation: String!
85
+ ): FullyDeleteCmsModelResponse!
86
+ cancelFullyDeleteModel(modelId: ID!): CancelDeleteCmsModelResponse!
87
+ }
88
+ `,
89
+ resolvers: {
90
+ CmsContentModel: {
91
+ isBeingDeleted: async (model, _, context) => {
92
+ try {
93
+ return await context.cms.isModelBeingDeleted(model.modelId);
94
+ } catch (ex) {
95
+ console.error(ex);
96
+ }
97
+ return true;
98
+ }
99
+ },
100
+ Query: {
101
+ getDeleteModelProgress: async (_, args, context) => {
102
+ return (0, _handlerGraphql.resolve)(async () => {
103
+ const input = getValidation.safeParse(args);
104
+ if (input.error) {
105
+ throw (0, _utils.createZodError)(input.error);
106
+ }
107
+ return await context.cms.getDeleteModelProgress(input.data.modelId);
108
+ });
109
+ }
110
+ },
111
+ Mutation: {
112
+ fullyDeleteModel: async (_, args, context) => {
113
+ return (0, _handlerGraphql.resolve)(async () => {
114
+ const input = deleteValidation.safeParse(args);
115
+ if (input.error) {
116
+ throw (0, _utils.createZodError)(input.error);
117
+ }
118
+ return await context.cms.fullyDeleteModel(input.data.modelId);
119
+ });
120
+ },
121
+ cancelFullyDeleteModel: async (_, args, context) => {
122
+ return (0, _handlerGraphql.resolve)(async () => {
123
+ const input = cancelValidation.safeParse(args);
124
+ if (input.error) {
125
+ throw (0, _utils.createZodError)(input.error);
126
+ }
127
+ return await context.cms.cancelFullyDeleteModel(input.data.modelId);
128
+ });
129
+ }
130
+ }
131
+ },
132
+ resolverDecorators: {
133
+ ["Query.listContentModels"]: [(0, _handlerGraphql.createResolverDecorator)(resolver => async (parent, args, context, info) => {
134
+ const result = await resolver(parent, args, context, info);
135
+ if (result.error || !Array.isArray(result.data)) {
136
+ return result;
137
+ }
138
+ if (args?.includeBeingDeleted !== false) {
139
+ return result;
140
+ }
141
+ const listed = result.data;
142
+ try {
143
+ const beingDeletedList = await context.cms.listModelsBeingDeleted();
144
+ return new _handlerGraphql.Response(listed.filter(model => {
145
+ if (!model?.modelId) {
146
+ return false;
147
+ } else if (beingDeletedList.some(item => item.modelId === model.modelId)) {
148
+ return false;
149
+ }
150
+ return true;
151
+ }));
152
+ } catch (ex) {
153
+ return new _handlerGraphql.ErrorResponse(ex);
154
+ }
155
+ })]
156
+ }
157
+ });
158
+ plugin.name = "headless-cms.graphql.fullyDeleteModel";
159
+ inputContext.plugins.register(plugin);
160
+ });
161
+ contextPlugin.name = "headless-cms.context.createDeleteModelGraphQl";
162
+ return contextPlugin;
163
+ };
164
+ exports.createDeleteModelGraphQl = createDeleteModelGraphQl;
165
+
166
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_zod","_interopRequireDefault","require","_api","_apiHeadlessCms","_confirmation","_handlerGraphql","_utils","deleteValidation","zod","object","modelId","string","confirmation","superRefine","value","context","validateConfirmation","addIssue","code","ZodIssueCode","custom","message","fatal","path","readonly","cancelValidation","getValidation","createDeleteModelGraphQl","contextPlugin","ContextPlugin","inputContext","ready","isHeadlessCmsReady","cms","MANAGE","plugin","CmsGraphQLSchemaPlugin","typeDefs","resolvers","CmsContentModel","isBeingDeleted","model","_","isModelBeingDeleted","ex","console","error","Query","getDeleteModelProgress","args","resolve","input","safeParse","createZodError","data","Mutation","fullyDeleteModel","cancelFullyDeleteModel","resolverDecorators","createResolverDecorator","resolver","parent","info","result","Array","isArray","includeBeingDeleted","listed","beingDeletedList","listModelsBeingDeleted","Response","filter","some","item","ErrorResponse","name","plugins","register","exports"],"sources":["index.ts"],"sourcesContent":["import zod from \"zod\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { CmsGraphQLSchemaPlugin, isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport { validateConfirmation } from \"../helpers/confirmation\";\nimport type { HcmsTasksContext } from \"~/types\";\nimport { createResolverDecorator, ErrorResponse, resolve, Response } from \"@webiny/handler-graphql\";\nimport { createZodError } from \"@webiny/utils\";\nimport type { IDeleteCmsModelTask } from \"~/tasks/deleteModel/types\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\n\nconst deleteValidation = zod\n .object({\n modelId: zod.string(),\n confirmation: zod.string()\n })\n .superRefine((value, context) => {\n if (validateConfirmation(value)) {\n return;\n }\n context.addIssue({\n code: zod.ZodIssueCode.custom,\n message: `Confirmation input does not match.`,\n fatal: true,\n path: [\"confirmation\"]\n });\n })\n .readonly();\n\nconst cancelValidation = zod\n .object({\n modelId: zod.string()\n })\n .readonly();\n\nconst getValidation = zod\n .object({\n modelId: zod.string()\n })\n .readonly();\n\nexport const createDeleteModelGraphQl = <T extends HcmsTasksContext = HcmsTasksContext>() => {\n const contextPlugin = new ContextPlugin<T>(async inputContext => {\n const ready = await isHeadlessCmsReady(inputContext);\n\n if (!ready || !inputContext.cms.MANAGE) {\n return;\n }\n\n const plugin = new CmsGraphQLSchemaPlugin<T>({\n typeDefs: /* GraphQL */ `\n enum DeleteCmsModelTaskStatus {\n running\n done\n error\n canceled\n }\n type DeleteCmsModelTask {\n id: ID!\n status: DeleteCmsModelTaskStatus!\n deleted: Int!\n total: Int!\n }\n\n type GetDeleteCmsModelProgressResponse {\n data: DeleteCmsModelTask\n error: CmsError\n }\n\n type FullyDeleteCmsModelResponse {\n data: DeleteCmsModelTask\n error: CmsError\n }\n\n type CancelDeleteCmsModelResponse {\n data: DeleteCmsModelTask\n error: CmsError\n }\n\n extend type CmsContentModel {\n isBeingDeleted: Boolean!\n }\n\n extend type Query {\n getDeleteModelProgress(modelId: ID!): GetDeleteCmsModelProgressResponse!\n listContentModels(\n includeBeingDeleted: Boolean = false\n ): CmsContentModelListResponse\n }\n\n extend type Mutation {\n fullyDeleteModel(\n modelId: ID!\n confirmation: String!\n ): FullyDeleteCmsModelResponse!\n cancelFullyDeleteModel(modelId: ID!): CancelDeleteCmsModelResponse!\n }\n `,\n resolvers: {\n CmsContentModel: {\n isBeingDeleted: async (model: CmsModel, _: unknown, context) => {\n try {\n return await context.cms.isModelBeingDeleted(model.modelId);\n } catch (ex) {\n console.error(ex);\n }\n return true;\n }\n },\n Query: {\n getDeleteModelProgress: async (_: unknown, args: unknown, context) => {\n return resolve<IDeleteCmsModelTask>(async () => {\n const input = getValidation.safeParse(args);\n if (input.error) {\n throw createZodError(input.error);\n }\n return await context.cms.getDeleteModelProgress(input.data.modelId);\n });\n }\n },\n Mutation: {\n fullyDeleteModel: async (_: unknown, args: unknown, context) => {\n return resolve<IDeleteCmsModelTask>(async () => {\n const input = deleteValidation.safeParse(args);\n if (input.error) {\n throw createZodError(input.error);\n }\n return await context.cms.fullyDeleteModel(input.data.modelId);\n });\n },\n cancelFullyDeleteModel: async (_: unknown, args: unknown, context) => {\n return resolve<IDeleteCmsModelTask>(async () => {\n const input = cancelValidation.safeParse(args);\n if (input.error) {\n throw createZodError(input.error);\n }\n return await context.cms.cancelFullyDeleteModel(input.data.modelId);\n });\n }\n }\n },\n resolverDecorators: {\n [\"Query.listContentModels\"]: [\n createResolverDecorator<any, any, HcmsTasksContext>(\n resolver => async (parent, args, context, info) => {\n const result = await resolver(parent, args, context, info);\n if (result.error || !Array.isArray(result.data)) {\n return result;\n }\n\n if (args?.includeBeingDeleted !== false) {\n return result;\n }\n\n const listed = result.data as CmsModel[];\n\n try {\n const beingDeletedList = await context.cms.listModelsBeingDeleted();\n\n return new Response(\n listed.filter(model => {\n if (!model?.modelId) {\n return false;\n } else if (\n beingDeletedList.some(\n item => item.modelId === model.modelId\n )\n ) {\n return false;\n }\n return true;\n })\n );\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n )\n ]\n }\n });\n plugin.name = \"headless-cms.graphql.fullyDeleteModel\";\n inputContext.plugins.register(plugin);\n });\n contextPlugin.name = \"headless-cms.context.createDeleteModelGraphQl\";\n return contextPlugin;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import type { IStoreValue } from "../types";
2
+ export interface ICreateIsModelBeingDeletedParams {
3
+ listModelsBeingDeleted: () => Promise<IStoreValue[]>;
4
+ }
5
+ export declare const createIsModelBeingDeleted: (params: ICreateIsModelBeingDeletedParams) => (modelId: string) => Promise<boolean>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createIsModelBeingDeleted = void 0;
7
+ const createIsModelBeingDeleted = params => {
8
+ return async modelId => {
9
+ const items = await params.listModelsBeingDeleted();
10
+ return items.some(item => item.modelId === modelId);
11
+ };
12
+ };
13
+ exports.createIsModelBeingDeleted = createIsModelBeingDeleted;
14
+
15
+ //# sourceMappingURL=isModelBeingDeleted.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createIsModelBeingDeleted","params","modelId","items","listModelsBeingDeleted","some","item","exports"],"sources":["isModelBeingDeleted.ts"],"sourcesContent":["import type { IStoreValue } from \"~/tasks/deleteModel/types\";\n\nexport interface ICreateIsModelBeingDeletedParams {\n listModelsBeingDeleted: () => Promise<IStoreValue[]>;\n}\n\nexport const createIsModelBeingDeleted = (params: ICreateIsModelBeingDeletedParams) => {\n return async (modelId: string) => {\n const items = await params.listModelsBeingDeleted();\n return items.some(item => item.modelId === modelId);\n };\n};\n"],"mappings":";;;;;;AAMO,MAAMA,yBAAyB,GAAIC,MAAwC,IAAK;EACnF,OAAO,MAAOC,OAAe,IAAK;IAC9B,MAAMC,KAAK,GAAG,MAAMF,MAAM,CAACG,sBAAsB,CAAC,CAAC;IACnD,OAAOD,KAAK,CAACE,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACJ,OAAO,KAAKA,OAAO,CAAC;EACvD,CAAC;AACL,CAAC;AAACK,OAAA,CAAAP,yBAAA,GAAAA,yBAAA","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import { TaskDataStatus } from "@webiny/tasks";
2
+ import { DeleteCmsModelTaskStatus } from "../types";
3
+ export declare const getStatus: (status: TaskDataStatus) => DeleteCmsModelTaskStatus;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getStatus = void 0;
7
+ var _tasks = require("@webiny/tasks");
8
+ var _types = require("../types");
9
+ const getStatus = status => {
10
+ switch (status) {
11
+ case _tasks.TaskDataStatus.PENDING:
12
+ case _tasks.TaskDataStatus.RUNNING:
13
+ return _types.DeleteCmsModelTaskStatus.RUNNING;
14
+ case _tasks.TaskDataStatus.FAILED:
15
+ return _types.DeleteCmsModelTaskStatus.ERROR;
16
+ case _tasks.TaskDataStatus.ABORTED:
17
+ return _types.DeleteCmsModelTaskStatus.CANCELED;
18
+ case _tasks.TaskDataStatus.SUCCESS:
19
+ return _types.DeleteCmsModelTaskStatus.DONE;
20
+ }
21
+ };
22
+ exports.getStatus = getStatus;
23
+
24
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_tasks","require","_types","getStatus","status","TaskDataStatus","PENDING","RUNNING","DeleteCmsModelTaskStatus","FAILED","ERROR","ABORTED","CANCELED","SUCCESS","DONE","exports"],"sources":["status.ts"],"sourcesContent":["import { TaskDataStatus } from \"@webiny/tasks\";\nimport { DeleteCmsModelTaskStatus } from \"~/tasks/deleteModel/types\";\n\nexport const getStatus = (status: TaskDataStatus): DeleteCmsModelTaskStatus => {\n switch (status) {\n case TaskDataStatus.PENDING:\n case TaskDataStatus.RUNNING:\n return DeleteCmsModelTaskStatus.RUNNING;\n case TaskDataStatus.FAILED:\n return DeleteCmsModelTaskStatus.ERROR;\n case TaskDataStatus.ABORTED:\n return DeleteCmsModelTaskStatus.CANCELED;\n case TaskDataStatus.SUCCESS:\n return DeleteCmsModelTaskStatus.DONE;\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEO,MAAME,SAAS,GAAIC,MAAsB,IAA+B;EAC3E,QAAQA,MAAM;IACV,KAAKC,qBAAc,CAACC,OAAO;IAC3B,KAAKD,qBAAc,CAACE,OAAO;MACvB,OAAOC,+BAAwB,CAACD,OAAO;IAC3C,KAAKF,qBAAc,CAACI,MAAM;MACtB,OAAOD,+BAAwB,CAACE,KAAK;IACzC,KAAKL,qBAAc,CAACM,OAAO;MACvB,OAAOH,+BAAwB,CAACI,QAAQ;IAC5C,KAAKP,qBAAc,CAACQ,OAAO;MACvB,OAAOL,+BAAwB,CAACM,IAAI;EAC5C;AACJ,CAAC;AAACC,OAAA,CAAAZ,SAAA,GAAAA,SAAA","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ export declare const generateConfirmation: (modelId: string) => string;
2
+ export interface IValidateConfirmationParams {
3
+ modelId?: string;
4
+ confirmation?: string;
5
+ }
6
+ export declare const validateConfirmation: (params: IValidateConfirmationParams) => boolean;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.validateConfirmation = exports.generateConfirmation = void 0;
7
+ const generateConfirmation = modelId => {
8
+ return `delete ${modelId}`;
9
+ };
10
+ exports.generateConfirmation = generateConfirmation;
11
+ const validateConfirmation = params => {
12
+ const {
13
+ modelId,
14
+ confirmation
15
+ } = params;
16
+ if (!modelId || !confirmation) {
17
+ return false;
18
+ }
19
+ return confirmation === generateConfirmation(modelId);
20
+ };
21
+ exports.validateConfirmation = validateConfirmation;
22
+
23
+ //# sourceMappingURL=confirmation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["generateConfirmation","modelId","exports","validateConfirmation","params","confirmation"],"sources":["confirmation.ts"],"sourcesContent":["export const generateConfirmation = (modelId: string): string => {\n return `delete ${modelId}`;\n};\n\nexport interface IValidateConfirmationParams {\n modelId?: string;\n confirmation?: string;\n}\nexport const validateConfirmation = (params: IValidateConfirmationParams): boolean => {\n const { modelId, confirmation } = params;\n if (!modelId || !confirmation) {\n return false;\n }\n return confirmation === generateConfirmation(modelId);\n};\n"],"mappings":";;;;;;AAAO,MAAMA,oBAAoB,GAAIC,OAAe,IAAa;EAC7D,OAAO,UAAUA,OAAO,EAAE;AAC9B,CAAC;AAACC,OAAA,CAAAF,oBAAA,GAAAA,oBAAA;AAMK,MAAMG,oBAAoB,GAAIC,MAAmC,IAAc;EAClF,MAAM;IAAEH,OAAO;IAAEI;EAAa,CAAC,GAAGD,MAAM;EACxC,IAAI,CAACH,OAAO,IAAI,CAACI,YAAY,EAAE;IAC3B,OAAO,KAAK;EAChB;EACA,OAAOA,YAAY,KAAKL,oBAAoB,CAACC,OAAO,CAAC;AACzD,CAAC;AAACC,OAAA,CAAAC,oBAAA,GAAAA,oBAAA","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ import { IStoreValue } from "../types";
2
+ import { StorageKey } from "@webiny/db/types";
3
+ export interface ICreateStoreKeyParams {
4
+ modelId: string;
5
+ tenant: string;
6
+ locale: string;
7
+ }
8
+ export declare const createStoreNamespace: (params: Pick<ICreateStoreKeyParams, "tenant" | "locale">) => string;
9
+ export declare const createStoreKey: (params: ICreateStoreKeyParams) => StorageKey;
10
+ export declare const createStoreValue: (params: IStoreValue) => IStoreValue;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createStoreValue = exports.createStoreNamespace = exports.createStoreKey = void 0;
7
+ const createStoreNamespace = params => {
8
+ return `deletingCmsModel#T#${params.tenant}#L#${params.locale}#`;
9
+ };
10
+ exports.createStoreNamespace = createStoreNamespace;
11
+ const createStoreKey = params => {
12
+ return `${createStoreNamespace(params)}${params.modelId}`;
13
+ };
14
+ exports.createStoreKey = createStoreKey;
15
+ const createStoreValue = params => {
16
+ return {
17
+ modelId: params.modelId,
18
+ task: params.task,
19
+ identity: params.identity,
20
+ tenant: params.tenant,
21
+ locale: params.locale
22
+ };
23
+ };
24
+ exports.createStoreValue = createStoreValue;
25
+
26
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createStoreNamespace","params","tenant","locale","exports","createStoreKey","modelId","createStoreValue","task","identity"],"sources":["store.ts"],"sourcesContent":["import { IStoreValue } from \"~/tasks/deleteModel/types\";\nimport { StorageKey } from \"@webiny/db/types\";\n\nexport interface ICreateStoreKeyParams {\n modelId: string;\n tenant: string;\n locale: string;\n}\n\nexport const createStoreNamespace = (params: Pick<ICreateStoreKeyParams, \"tenant\" | \"locale\">) => {\n return `deletingCmsModel#T#${params.tenant}#L#${params.locale}#`;\n};\n\nexport const createStoreKey = (params: ICreateStoreKeyParams): StorageKey => {\n return `${createStoreNamespace(params)}${params.modelId}`;\n};\n\nexport const createStoreValue = (params: IStoreValue): IStoreValue => {\n return {\n modelId: params.modelId,\n task: params.task,\n identity: params.identity,\n tenant: params.tenant,\n locale: params.locale\n };\n};\n"],"mappings":";;;;;;AASO,MAAMA,oBAAoB,GAAIC,MAAwD,IAAK;EAC9F,OAAO,sBAAsBA,MAAM,CAACC,MAAM,MAAMD,MAAM,CAACE,MAAM,GAAG;AACpE,CAAC;AAACC,OAAA,CAAAJ,oBAAA,GAAAA,oBAAA;AAEK,MAAMK,cAAc,GAAIJ,MAA6B,IAAiB;EACzE,OAAO,GAAGD,oBAAoB,CAACC,MAAM,CAAC,GAAGA,MAAM,CAACK,OAAO,EAAE;AAC7D,CAAC;AAACF,OAAA,CAAAC,cAAA,GAAAA,cAAA;AAEK,MAAME,gBAAgB,GAAIN,MAAmB,IAAkB;EAClE,OAAO;IACHK,OAAO,EAAEL,MAAM,CAACK,OAAO;IACvBE,IAAI,EAAEP,MAAM,CAACO,IAAI;IACjBC,QAAQ,EAAER,MAAM,CAACQ,QAAQ;IACzBP,MAAM,EAAED,MAAM,CAACC,MAAM;IACrBC,MAAM,EAAEF,MAAM,CAACE;EACnB,CAAC;AACL,CAAC;AAACC,OAAA,CAAAG,gBAAA,GAAAA,gBAAA","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import { HcmsTasksContext } from "../../types";
2
+ import { IDeleteModelTaskInput, IDeleteModelTaskOutput } from "./types";
3
+ export declare const createDeleteModelTask: () => (import("@webiny/api").ContextPlugin<HcmsTasksContext> | import("@webiny/tasks").TaskDefinitionPlugin<HcmsTasksContext, IDeleteModelTaskInput, IDeleteModelTaskOutput>)[];
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createDeleteModelTask = void 0;
7
+ var _tasks = require("@webiny/tasks");
8
+ var _DeleteModelRunner = require("./DeleteModelRunner");
9
+ var _constants = require("./constants");
10
+ var _graphql = require("./graphql");
11
+ var _crud = require("./graphql/crud");
12
+ const createDefinition = () => {
13
+ return (0, _tasks.createTaskDefinition)({
14
+ id: _constants.DELETE_MODEL_TASK,
15
+ disableDatabaseLogs: true,
16
+ title: "Delete model and all of the entries",
17
+ maxIterations: 50,
18
+ isPrivate: true,
19
+ async run(params) {
20
+ try {
21
+ const deleteModelRunner = (0, _DeleteModelRunner.createDeleteModelRunner)({
22
+ taskId: params.store.getTask().id,
23
+ context: params.context,
24
+ response: params.response
25
+ });
26
+ return await deleteModelRunner.execute({
27
+ input: params.input,
28
+ isCloseToTimeout: params.isCloseToTimeout,
29
+ isAborted: params.isAborted
30
+ });
31
+ } catch (ex) {
32
+ return params.response.error(ex);
33
+ }
34
+ },
35
+ createInputValidation: ({
36
+ validator
37
+ }) => {
38
+ return {
39
+ modelId: validator.string(),
40
+ lastDeletedId: validator.string().optional()
41
+ };
42
+ }
43
+ });
44
+ };
45
+ const createDeleteModelTask = () => {
46
+ return [createDefinition(), (0, _crud.createDeleteModelCrud)(), (0, _graphql.createDeleteModelGraphQl)()];
47
+ };
48
+ exports.createDeleteModelTask = createDeleteModelTask;
49
+
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_tasks","require","_DeleteModelRunner","_constants","_graphql","_crud","createDefinition","createTaskDefinition","id","DELETE_MODEL_TASK","disableDatabaseLogs","title","maxIterations","isPrivate","run","params","deleteModelRunner","createDeleteModelRunner","taskId","store","getTask","context","response","execute","input","isCloseToTimeout","isAborted","ex","error","createInputValidation","validator","modelId","string","lastDeletedId","optional","createDeleteModelTask","createDeleteModelCrud","createDeleteModelGraphQl","exports"],"sources":["index.ts"],"sourcesContent":["import { createTaskDefinition } from \"@webiny/tasks\";\nimport { HcmsTasksContext } from \"~/types\";\nimport { IDeleteModelTaskInput, IDeleteModelTaskOutput } from \"./types\";\nimport { createDeleteModelRunner } from \"./DeleteModelRunner\";\nimport { DELETE_MODEL_TASK } from \"./constants\";\nimport { createDeleteModelGraphQl } from \"./graphql\";\nimport { createDeleteModelCrud } from \"./graphql/crud\";\n\nconst createDefinition = () => {\n return createTaskDefinition<HcmsTasksContext, IDeleteModelTaskInput, IDeleteModelTaskOutput>({\n id: DELETE_MODEL_TASK,\n disableDatabaseLogs: true,\n title: \"Delete model and all of the entries\",\n maxIterations: 50,\n isPrivate: true,\n async run(params) {\n try {\n const deleteModelRunner = createDeleteModelRunner({\n taskId: params.store.getTask().id,\n context: params.context,\n response: params.response\n });\n return await deleteModelRunner.execute({\n input: params.input,\n isCloseToTimeout: params.isCloseToTimeout,\n isAborted: params.isAborted\n });\n } catch (ex) {\n return params.response.error(ex);\n }\n },\n createInputValidation: ({ validator }) => {\n return {\n modelId: validator.string(),\n lastDeletedId: validator.string().optional()\n };\n }\n });\n};\n\nexport const createDeleteModelTask = () => {\n return [createDefinition(), createDeleteModelCrud(), createDeleteModelGraphQl()];\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA,IAAAC,kBAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AAEA,MAAMK,gBAAgB,GAAGA,CAAA,KAAM;EAC3B,OAAO,IAAAC,2BAAoB,EAAkE;IACzFC,EAAE,EAAEC,4BAAiB;IACrBC,mBAAmB,EAAE,IAAI;IACzBC,KAAK,EAAE,qCAAqC;IAC5CC,aAAa,EAAE,EAAE;IACjBC,SAAS,EAAE,IAAI;IACf,MAAMC,GAAGA,CAACC,MAAM,EAAE;MACd,IAAI;QACA,MAAMC,iBAAiB,GAAG,IAAAC,0CAAuB,EAAC;UAC9CC,MAAM,EAAEH,MAAM,CAACI,KAAK,CAACC,OAAO,CAAC,CAAC,CAACZ,EAAE;UACjCa,OAAO,EAAEN,MAAM,CAACM,OAAO;UACvBC,QAAQ,EAAEP,MAAM,CAACO;QACrB,CAAC,CAAC;QACF,OAAO,MAAMN,iBAAiB,CAACO,OAAO,CAAC;UACnCC,KAAK,EAAET,MAAM,CAACS,KAAK;UACnBC,gBAAgB,EAAEV,MAAM,CAACU,gBAAgB;UACzCC,SAAS,EAAEX,MAAM,CAACW;QACtB,CAAC,CAAC;MACN,CAAC,CAAC,OAAOC,EAAE,EAAE;QACT,OAAOZ,MAAM,CAACO,QAAQ,CAACM,KAAK,CAACD,EAAE,CAAC;MACpC;IACJ,CAAC;IACDE,qBAAqB,EAAEA,CAAC;MAAEC;IAAU,CAAC,KAAK;MACtC,OAAO;QACHC,OAAO,EAAED,SAAS,CAACE,MAAM,CAAC,CAAC;QAC3BC,aAAa,EAAEH,SAAS,CAACE,MAAM,CAAC,CAAC,CAACE,QAAQ,CAAC;MAC/C,CAAC;IACL;EACJ,CAAC,CAAC;AACN,CAAC;AAEM,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;EACvC,OAAO,CAAC7B,gBAAgB,CAAC,CAAC,EAAE,IAAA8B,2BAAqB,EAAC,CAAC,EAAE,IAAAC,iCAAwB,EAAC,CAAC,CAAC;AACpF,CAAC;AAACC,OAAA,CAAAH,qBAAA,GAAAA,qBAAA","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ import { CmsIdentity } from "@webiny/api-headless-cms/types";
2
+ import { ITaskResponseDoneResultOutput } from "@webiny/tasks";
3
+ import type { ListValuesResult } from "@webiny/db";
4
+ import type { GenericRecord } from "@webiny/api/types";
5
+ export interface IDeleteModelTaskInput {
6
+ modelId: string;
7
+ lastDeletedId?: string;
8
+ }
9
+ export interface IDeleteModelTaskOutput extends ITaskResponseDoneResultOutput {
10
+ total?: number;
11
+ deleted?: number;
12
+ }
13
+ export declare enum DeleteCmsModelTaskStatus {
14
+ RUNNING = "running",
15
+ DONE = "done",
16
+ ERROR = "error",
17
+ CANCELED = "canceled"
18
+ }
19
+ export interface IDeleteCmsModelTask {
20
+ id: string;
21
+ status: DeleteCmsModelTaskStatus;
22
+ total: number;
23
+ deleted: number;
24
+ message?: string;
25
+ }
26
+ export interface IStoreValue {
27
+ modelId: string;
28
+ tenant: string;
29
+ locale: string;
30
+ identity: CmsIdentity;
31
+ task: string;
32
+ }
33
+ export type ListStoreKeysResult = Promise<ListValuesResult<GenericRecord<string, IStoreValue>>>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DeleteCmsModelTaskStatus = void 0;
7
+ let DeleteCmsModelTaskStatus = exports.DeleteCmsModelTaskStatus = /*#__PURE__*/function (DeleteCmsModelTaskStatus) {
8
+ DeleteCmsModelTaskStatus["RUNNING"] = "running";
9
+ DeleteCmsModelTaskStatus["DONE"] = "done";
10
+ DeleteCmsModelTaskStatus["ERROR"] = "error";
11
+ DeleteCmsModelTaskStatus["CANCELED"] = "canceled";
12
+ return DeleteCmsModelTaskStatus;
13
+ }({});
14
+
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DeleteCmsModelTaskStatus","exports"],"sources":["types.ts"],"sourcesContent":["import { CmsIdentity } from \"@webiny/api-headless-cms/types\";\nimport { ITaskResponseDoneResultOutput } from \"@webiny/tasks\";\nimport type { ListValuesResult } from \"@webiny/db\";\nimport type { GenericRecord } from \"@webiny/api/types\";\n\nexport interface IDeleteModelTaskInput {\n modelId: string;\n lastDeletedId?: string;\n}\n\nexport interface IDeleteModelTaskOutput extends ITaskResponseDoneResultOutput {\n total?: number;\n deleted?: number;\n}\n\nexport enum DeleteCmsModelTaskStatus {\n RUNNING = \"running\",\n DONE = \"done\",\n ERROR = \"error\",\n CANCELED = \"canceled\"\n}\n\nexport interface IDeleteCmsModelTask {\n id: string;\n status: DeleteCmsModelTaskStatus;\n total: number;\n deleted: number;\n message?: string;\n}\n\nexport interface IStoreValue {\n modelId: string;\n tenant: string;\n locale: string;\n identity: CmsIdentity;\n task: string;\n}\n\nexport type ListStoreKeysResult = Promise<ListValuesResult<GenericRecord<string, IStoreValue>>>;\n"],"mappings":";;;;;;IAeYA,wBAAwB,GAAAC,OAAA,CAAAD,wBAAA,0BAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAA,OAAxBA,wBAAwB;AAAA","ignoreList":[]}
package/types.d.ts CHANGED
@@ -1,2 +1,14 @@
1
- import { HcmsBulkActionsContext } from "@webiny/api-headless-cms-bulk-actions/types";
2
- export type HcmsTasksContext = HcmsBulkActionsContext;
1
+ import type { HcmsBulkActionsContext } from "@webiny/api-headless-cms-bulk-actions/types";
2
+ import type { AcoContext } from "@webiny/api-aco/types";
3
+ import type { HeadlessCms } from "@webiny/api-headless-cms/types";
4
+ import { IDeleteCmsModelTask, IStoreValue } from "./tasks/deleteModel/types";
5
+ export interface HeadlessCmsFullyDeleteModel {
6
+ fullyDeleteModel: (modelId: string) => Promise<IDeleteCmsModelTask>;
7
+ cancelFullyDeleteModel: (modelId: string) => Promise<IDeleteCmsModelTask>;
8
+ getDeleteModelProgress: (modelId: string) => Promise<IDeleteCmsModelTask>;
9
+ isModelBeingDeleted: (modelId: string) => Promise<boolean>;
10
+ listModelsBeingDeleted: () => Promise<IStoreValue[]>;
11
+ }
12
+ export interface HcmsTasksContext extends HcmsBulkActionsContext, AcoContext {
13
+ cms: HeadlessCms & HeadlessCmsFullyDeleteModel;
14
+ }
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { HcmsBulkActionsContext } from \"@webiny/api-headless-cms-bulk-actions/types\";\n\nexport type HcmsTasksContext = HcmsBulkActionsContext;\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { HcmsBulkActionsContext } from \"@webiny/api-headless-cms-bulk-actions/types\";\nimport type { AcoContext } from \"@webiny/api-aco/types\";\nimport type { HeadlessCms } from \"@webiny/api-headless-cms/types\";\nimport { IDeleteCmsModelTask, IStoreValue } from \"~/tasks/deleteModel/types\";\n\nexport interface HeadlessCmsFullyDeleteModel {\n fullyDeleteModel: (modelId: string) => Promise<IDeleteCmsModelTask>;\n cancelFullyDeleteModel: (modelId: string) => Promise<IDeleteCmsModelTask>;\n getDeleteModelProgress: (modelId: string) => Promise<IDeleteCmsModelTask>;\n isModelBeingDeleted: (modelId: string) => Promise<boolean>;\n listModelsBeingDeleted: () => Promise<IStoreValue[]>;\n}\n\nexport interface HcmsTasksContext extends HcmsBulkActionsContext, AcoContext {\n cms: HeadlessCms & HeadlessCmsFullyDeleteModel;\n}\n"],"mappings":"","ignoreList":[]}