@webiny/api-headless-cms-bulk-actions 5.41.0-dbt.0 → 5.41.0

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 (41) hide show
  1. package/handlers/index.d.ts +1 -1
  2. package/index.d.ts +3 -1
  3. package/index.js +24 -2
  4. package/index.js.map +1 -1
  5. package/package.json +18 -18
  6. package/plugins/createBulkAction.d.ts +1 -0
  7. package/plugins/createBulkAction.js +2 -1
  8. package/plugins/createBulkAction.js.map +1 -1
  9. package/plugins/createBulkActionTasks.d.ts +1 -0
  10. package/plugins/createBulkActionTasks.js +61 -34
  11. package/plugins/createBulkActionTasks.js.map +1 -1
  12. package/tasks/createBulkActionEntriesTasks.js +1 -1
  13. package/tasks/createBulkActionEntriesTasks.js.map +1 -1
  14. package/tasks/createEmptyTrashBinsTask.js +75 -27
  15. package/tasks/createEmptyTrashBinsTask.js.map +1 -1
  16. package/tasks/index.d.ts +2 -1
  17. package/tasks/index.js +20 -5
  18. package/tasks/index.js.map +1 -1
  19. package/types.d.ts +13 -5
  20. package/types.js +17 -0
  21. package/types.js.map +1 -1
  22. package/useCases/ListNotPublishedEntries.d.ts +13 -0
  23. package/useCases/ListNotPublishedEntries.js +34 -0
  24. package/useCases/ListNotPublishedEntries.js.map +1 -0
  25. package/useCases/index.d.ts +1 -0
  26. package/useCases/index.js +11 -0
  27. package/useCases/index.js.map +1 -1
  28. package/useCases/internals/ChildTaskCleanup/ChildTasksCleanup.d.ts +4 -0
  29. package/useCases/internals/ChildTaskCleanup/ChildTasksCleanup.js +17 -3
  30. package/useCases/internals/ChildTaskCleanup/ChildTasksCleanup.js.map +1 -1
  31. package/useCases/internals/CreateTasksByModel/CreateTasksByModel.d.ts +2 -1
  32. package/useCases/internals/CreateTasksByModel/CreateTasksByModel.js +27 -23
  33. package/useCases/internals/CreateTasksByModel/CreateTasksByModel.js.map +1 -1
  34. package/useCases/internals/CreateTasksByModel/TaskCache.d.ts +5 -0
  35. package/useCases/internals/CreateTasksByModel/TaskCache.js +8 -0
  36. package/useCases/internals/CreateTasksByModel/TaskCache.js.map +1 -1
  37. package/useCases/internals/ProcessTask/ProcessTask.js +7 -18
  38. package/useCases/internals/ProcessTask/ProcessTask.js.map +1 -1
  39. package/useCases/internals/ProcessTasksByModel/ProcessTasksByModel.d.ts +1 -1
  40. package/useCases/internals/ProcessTasksByModel/ProcessTasksByModel.js +14 -8
  41. package/useCases/internals/ProcessTasksByModel/ProcessTasksByModel.js.map +1 -1
@@ -1 +1 @@
1
- export declare const createHandlers: () => (import("@webiny/handler").HandlerOnRequestPlugin | import("@webiny/handler-aws").EventBridgeEventHandler<"WebinyEmptyTrashBin", Record<string, any>, any>)[];
1
+ export declare const createHandlers: () => (import("@webiny/handler-aws").EventBridgeEventHandler<"WebinyEmptyTrashBin", Record<string, any>, any> | import("@webiny/handler").HandlerOnRequestPlugin)[];
package/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export * from "./abstractions";
2
+ export * from "./handlers";
2
3
  export * from "./useCases";
3
4
  export * from "./plugins";
4
- export declare const createHcmsBulkActions: () => (import("@webiny/api").ContextPlugin<import("./types").HcmsBulkActionsContext> | ((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>)[])[][] | import("@webiny/tasks").TaskDefinitionPlugin<import("./types").HcmsBulkActionsContext, any, import("@webiny/tasks").ITaskResponseDoneResultOutput>)[] | (import("@webiny/handler").HandlerOnRequestPlugin | import("@webiny/handler-aws").EventBridgeEventHandler<"WebinyEmptyTrashBin", Record<string, any>, any>)[])[];
5
+ export * from "./tasks";
6
+ export declare const createHcmsBulkActions: () => ((import("@webiny/handler-aws").EventBridgeEventHandler<"WebinyEmptyTrashBin", Record<string, any>, any> | import("@webiny/handler").HandlerOnRequestPlugin)[] | import("@webiny/api").ContextPlugin<import("./types").HcmsBulkActionsContext>)[];
package/index.js CHANGED
@@ -7,8 +7,18 @@ var _exportNames = {
7
7
  createHcmsBulkActions: true
8
8
  };
9
9
  exports.createHcmsBulkActions = void 0;
10
- var _tasks = require("./tasks");
11
10
  var _handlers = require("./handlers");
11
+ Object.keys(_handlers).forEach(function (key) {
12
+ if (key === "default" || key === "__esModule") return;
13
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
14
+ if (key in exports && exports[key] === _handlers[key]) return;
15
+ Object.defineProperty(exports, key, {
16
+ enumerable: true,
17
+ get: function () {
18
+ return _handlers[key];
19
+ }
20
+ });
21
+ });
12
22
  var _plugins = require("./plugins");
13
23
  Object.keys(_plugins).forEach(function (key) {
14
24
  if (key === "default" || key === "__esModule") return;
@@ -45,7 +55,19 @@ Object.keys(_useCases).forEach(function (key) {
45
55
  }
46
56
  });
47
57
  });
48
- const createHcmsBulkActions = () => [(0, _tasks.createTasks)(), (0, _handlers.createHandlers)(), (0, _plugins.createDefaultGraphQL)()];
58
+ var _tasks = require("./tasks");
59
+ Object.keys(_tasks).forEach(function (key) {
60
+ if (key === "default" || key === "__esModule") return;
61
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
62
+ if (key in exports && exports[key] === _tasks[key]) return;
63
+ Object.defineProperty(exports, key, {
64
+ enumerable: true,
65
+ get: function () {
66
+ return _tasks[key];
67
+ }
68
+ });
69
+ });
70
+ const createHcmsBulkActions = () => [(0, _handlers.createHandlers)(), (0, _plugins.createDefaultGraphQL)()];
49
71
  exports.createHcmsBulkActions = createHcmsBulkActions;
50
72
 
51
73
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_tasks","require","_handlers","_plugins","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_abstractions","_useCases","createHcmsBulkActions","createTasks","createHandlers","createDefaultGraphQL"],"sources":["index.ts"],"sourcesContent":["import { createTasks } from \"~/tasks\";\nimport { createHandlers } from \"~/handlers\";\nimport { createDefaultGraphQL } from \"~/plugins\";\n\nexport * from \"./abstractions\";\nexport * from \"./useCases\";\nexport * from \"./plugins\";\n\nexport const createHcmsBulkActions = () => [\n createTasks(),\n createHandlers(),\n createDefaultGraphQL()\n];\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAIAG,MAAA,CAAAC,IAAA,CAAAF,QAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,QAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,QAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AAFA,IAAAS,aAAA,GAAAf,OAAA;AAAAG,MAAA,CAAAC,IAAA,CAAAW,aAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,aAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,aAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AACA,IAAAU,SAAA,GAAAhB,OAAA;AAAAG,MAAA,CAAAC,IAAA,CAAAY,SAAA,EAAAX,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAU,SAAA,CAAAV,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,SAAA,CAAAV,GAAA;IAAA;EAAA;AAAA;AAGO,MAAMW,qBAAqB,GAAGA,CAAA,KAAM,CACvC,IAAAC,kBAAW,EAAC,CAAC,EACb,IAAAC,wBAAc,EAAC,CAAC,EAChB,IAAAC,6BAAoB,EAAC,CAAC,CACzB;AAACT,OAAA,CAAAM,qBAAA,GAAAA,qBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_handlers","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_plugins","_abstractions","_useCases","_tasks","createHcmsBulkActions","createHandlers","createDefaultGraphQL"],"sources":["index.ts"],"sourcesContent":["import { createHandlers } from \"~/handlers\";\nimport { createDefaultGraphQL } from \"~/plugins\";\n\nexport * from \"./abstractions\";\nexport * from \"./handlers\";\nexport * from \"./useCases\";\nexport * from \"./plugins\";\nexport * from \"./tasks\";\n\nexport const createHcmsBulkActions = () => [createHandlers(), createDefaultGraphQL()];\n"],"mappings":";;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAIAC,MAAA,CAAAC,IAAA,CAAAH,SAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,SAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,SAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AAHA,IAAAS,QAAA,GAAAb,OAAA;AAKAC,MAAA,CAAAC,IAAA,CAAAW,QAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,QAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,QAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AAHA,IAAAU,aAAA,GAAAd,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAY,aAAA,EAAAX,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAU,aAAA,CAAAV,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,aAAA,CAAAV,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAW,SAAA,GAAAf,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAa,SAAA,EAAAZ,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAW,SAAA,CAAAX,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,SAAA,CAAAX,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAY,MAAA,GAAAhB,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAc,MAAA,EAAAb,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAY,MAAA,CAAAZ,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,MAAA,CAAAZ,GAAA;IAAA;EAAA;AAAA;AAEO,MAAMa,qBAAqB,GAAGA,CAAA,KAAM,CAAC,IAAAC,wBAAc,EAAC,CAAC,EAAE,IAAAC,6BAAoB,EAAC,CAAC,CAAC;AAACV,OAAA,CAAAQ,qBAAA,GAAAA,qBAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms-bulk-actions",
3
- "version": "5.41.0-dbt.0",
3
+ "version": "5.41.0",
4
4
  "main": "index.js",
5
5
  "description": "Webiny Headless CMS bulk actions",
6
6
  "keywords": [
@@ -13,11 +13,11 @@
13
13
  },
14
14
  "license": "MIT",
15
15
  "dependencies": {
16
- "@webiny/api-headless-cms": "5.41.0-dbt.0",
17
- "@webiny/handler": "5.41.0-dbt.0",
18
- "@webiny/handler-aws": "5.41.0-dbt.0",
19
- "@webiny/tasks": "5.41.0-dbt.0",
20
- "@webiny/utils": "5.41.0-dbt.0"
16
+ "@webiny/api-headless-cms": "5.41.0",
17
+ "@webiny/handler": "5.41.0",
18
+ "@webiny/handler-aws": "5.41.0",
19
+ "@webiny/tasks": "5.41.0",
20
+ "@webiny/utils": "5.41.0"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@babel/cli": "7.24.1",
@@ -25,17 +25,17 @@
25
25
  "@babel/preset-env": "7.24.3",
26
26
  "@babel/preset-typescript": "7.24.1",
27
27
  "@babel/runtime": "7.24.1",
28
- "@webiny/api": "5.41.0-dbt.0",
29
- "@webiny/api-admin-users": "5.41.0-dbt.0",
30
- "@webiny/api-i18n": "5.41.0-dbt.0",
31
- "@webiny/api-security": "5.41.0-dbt.0",
32
- "@webiny/api-tenancy": "5.41.0-dbt.0",
33
- "@webiny/api-wcp": "5.41.0-dbt.0",
34
- "@webiny/cli": "5.41.0-dbt.0",
35
- "@webiny/handler-graphql": "5.41.0-dbt.0",
36
- "@webiny/plugins": "5.41.0-dbt.0",
37
- "@webiny/project-utils": "5.41.0-dbt.0",
38
- "@webiny/wcp": "5.41.0-dbt.0",
28
+ "@webiny/api": "5.41.0",
29
+ "@webiny/api-admin-users": "5.41.0",
30
+ "@webiny/api-i18n": "5.41.0",
31
+ "@webiny/api-security": "5.41.0",
32
+ "@webiny/api-tenancy": "5.41.0",
33
+ "@webiny/api-wcp": "5.41.0",
34
+ "@webiny/cli": "5.41.0",
35
+ "@webiny/handler-graphql": "5.41.0",
36
+ "@webiny/plugins": "5.41.0",
37
+ "@webiny/project-utils": "5.41.0",
38
+ "@webiny/wcp": "5.41.0",
39
39
  "graphql": "15.8.0",
40
40
  "ttypescript": "1.5.15",
41
41
  "typescript": "4.9.5"
@@ -48,5 +48,5 @@
48
48
  "access": "public",
49
49
  "directory": "dist"
50
50
  },
51
- "gitHead": "bbaec4dd1685579548c08bbde386aee5d96b80f8"
51
+ "gitHead": "a542f4d0806744c5e2333b3786478c4af3b6b750"
52
52
  }
@@ -5,5 +5,6 @@ export interface CreateBulkActionConfig {
5
5
  dataLoader: (context: HcmsBulkActionsContext) => IListEntries;
6
6
  dataProcessor: (context: HcmsBulkActionsContext) => IProcessEntry;
7
7
  modelIds?: string[];
8
+ batchSize?: number;
8
9
  }
9
10
  export declare const createBulkAction: (config: CreateBulkActionConfig) => (import("@webiny/api").ContextPlugin<HcmsBulkActionsContext> | (import("@webiny/tasks").TaskDefinitionPlugin<HcmsBulkActionsContext, import("../types").IBulkActionOperationByModelInput, import("../types").IBulkActionOperationByModelOutput> | import("@webiny/tasks").TaskDefinitionPlugin<HcmsBulkActionsContext, import("../types").IBulkActionOperationInput, import("../types").IBulkActionOperationOutput>)[])[];
@@ -24,7 +24,8 @@ const createBulkAction = config => {
24
24
  return [(0, _createBulkActionTasks.createBulkActionTasks)({
25
25
  name,
26
26
  dataLoader: config.dataLoader,
27
- dataProcessor: config.dataProcessor
27
+ dataProcessor: config.dataProcessor,
28
+ batchSize: config.batchSize
28
29
  }), (0, _createBulkActionGraphQL.createBulkActionGraphQL)({
29
30
  name,
30
31
  modelIds: config.modelIds
@@ -1 +1 @@
1
- {"version":3,"names":["_createBulkActionGraphQL","require","_createBulkActionTasks","toPascalCase","str","replace","words","split","capitalizedWords","map","word","charAt","toUpperCase","slice","join","createBulkAction","config","name","createBulkActionTasks","dataLoader","dataProcessor","createBulkActionGraphQL","modelIds","exports"],"sources":["createBulkAction.ts"],"sourcesContent":["import { createBulkActionGraphQL } from \"./createBulkActionGraphQL\";\nimport { createBulkActionTasks } from \"~/plugins/createBulkActionTasks\";\nimport { IListEntries, IProcessEntry } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nexport interface CreateBulkActionConfig {\n name: string;\n dataLoader: (context: HcmsBulkActionsContext) => IListEntries;\n dataProcessor: (context: HcmsBulkActionsContext) => IProcessEntry;\n modelIds?: string[];\n}\n\nfunction toPascalCase(str: string) {\n // Step 1: Remove non-alphanumeric characters and replace them with spaces\n str = str.replace(/[^a-zA-Z0-9]+/g, \" \");\n\n // Step 2: Split the string into words\n const words = str.split(\" \");\n\n // Step 3: Capitalize the first letter of each word\n const capitalizedWords = words.map(word => word.charAt(0).toUpperCase() + word.slice(1));\n\n // Step 4: Join all the capitalized words together\n return capitalizedWords.join(\"\");\n}\n\nexport const createBulkAction = (config: CreateBulkActionConfig) => {\n const name = toPascalCase(config.name);\n\n return [\n createBulkActionTasks({\n name,\n dataLoader: config.dataLoader,\n dataProcessor: config.dataProcessor\n }),\n createBulkActionGraphQL({\n name,\n modelIds: config.modelIds\n })\n ];\n};\n"],"mappings":";;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AAWA,SAASE,YAAYA,CAACC,GAAW,EAAE;EAC/B;EACAA,GAAG,GAAGA,GAAG,CAACC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;;EAExC;EACA,MAAMC,KAAK,GAAGF,GAAG,CAACG,KAAK,CAAC,GAAG,CAAC;;EAE5B;EACA,MAAMC,gBAAgB,GAAGF,KAAK,CAACG,GAAG,CAACC,IAAI,IAAIA,IAAI,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGF,IAAI,CAACG,KAAK,CAAC,CAAC,CAAC,CAAC;;EAExF;EACA,OAAOL,gBAAgB,CAACM,IAAI,CAAC,EAAE,CAAC;AACpC;AAEO,MAAMC,gBAAgB,GAAIC,MAA8B,IAAK;EAChE,MAAMC,IAAI,GAAGd,YAAY,CAACa,MAAM,CAACC,IAAI,CAAC;EAEtC,OAAO,CACH,IAAAC,4CAAqB,EAAC;IAClBD,IAAI;IACJE,UAAU,EAAEH,MAAM,CAACG,UAAU;IAC7BC,aAAa,EAAEJ,MAAM,CAACI;EAC1B,CAAC,CAAC,EACF,IAAAC,gDAAuB,EAAC;IACpBJ,IAAI;IACJK,QAAQ,EAAEN,MAAM,CAACM;EACrB,CAAC,CAAC,CACL;AACL,CAAC;AAACC,OAAA,CAAAR,gBAAA,GAAAA,gBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_createBulkActionGraphQL","require","_createBulkActionTasks","toPascalCase","str","replace","words","split","capitalizedWords","map","word","charAt","toUpperCase","slice","join","createBulkAction","config","name","createBulkActionTasks","dataLoader","dataProcessor","batchSize","createBulkActionGraphQL","modelIds","exports"],"sources":["createBulkAction.ts"],"sourcesContent":["import { createBulkActionGraphQL } from \"./createBulkActionGraphQL\";\nimport { createBulkActionTasks } from \"~/plugins/createBulkActionTasks\";\nimport { IListEntries, IProcessEntry } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nexport interface CreateBulkActionConfig {\n name: string;\n dataLoader: (context: HcmsBulkActionsContext) => IListEntries;\n dataProcessor: (context: HcmsBulkActionsContext) => IProcessEntry;\n modelIds?: string[];\n batchSize?: number;\n}\n\nfunction toPascalCase(str: string) {\n // Step 1: Remove non-alphanumeric characters and replace them with spaces\n str = str.replace(/[^a-zA-Z0-9]+/g, \" \");\n\n // Step 2: Split the string into words\n const words = str.split(\" \");\n\n // Step 3: Capitalize the first letter of each word\n const capitalizedWords = words.map(word => word.charAt(0).toUpperCase() + word.slice(1));\n\n // Step 4: Join all the capitalized words together\n return capitalizedWords.join(\"\");\n}\n\nexport const createBulkAction = (config: CreateBulkActionConfig) => {\n const name = toPascalCase(config.name);\n\n return [\n createBulkActionTasks({\n name,\n dataLoader: config.dataLoader,\n dataProcessor: config.dataProcessor,\n batchSize: config.batchSize\n }),\n createBulkActionGraphQL({\n name,\n modelIds: config.modelIds\n })\n ];\n};\n"],"mappings":";;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AAYA,SAASE,YAAYA,CAACC,GAAW,EAAE;EAC/B;EACAA,GAAG,GAAGA,GAAG,CAACC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;;EAExC;EACA,MAAMC,KAAK,GAAGF,GAAG,CAACG,KAAK,CAAC,GAAG,CAAC;;EAE5B;EACA,MAAMC,gBAAgB,GAAGF,KAAK,CAACG,GAAG,CAACC,IAAI,IAAIA,IAAI,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGF,IAAI,CAACG,KAAK,CAAC,CAAC,CAAC,CAAC;;EAExF;EACA,OAAOL,gBAAgB,CAACM,IAAI,CAAC,EAAE,CAAC;AACpC;AAEO,MAAMC,gBAAgB,GAAIC,MAA8B,IAAK;EAChE,MAAMC,IAAI,GAAGd,YAAY,CAACa,MAAM,CAACC,IAAI,CAAC;EAEtC,OAAO,CACH,IAAAC,4CAAqB,EAAC;IAClBD,IAAI;IACJE,UAAU,EAAEH,MAAM,CAACG,UAAU;IAC7BC,aAAa,EAAEJ,MAAM,CAACI,aAAa;IACnCC,SAAS,EAAEL,MAAM,CAACK;EACtB,CAAC,CAAC,EACF,IAAAC,gDAAuB,EAAC;IACpBL,IAAI;IACJM,QAAQ,EAAEP,MAAM,CAACO;EACrB,CAAC,CAAC,CACL;AACL,CAAC;AAACC,OAAA,CAAAT,gBAAA,GAAAA,gBAAA","ignoreList":[]}
@@ -4,5 +4,6 @@ export interface CreateBackgroundTasksConfig {
4
4
  name: string;
5
5
  dataLoader: (context: HcmsBulkActionsContext) => IListEntries;
6
6
  dataProcessor: (context: HcmsBulkActionsContext) => IProcessEntry;
7
+ batchSize?: number;
7
8
  }
8
9
  export declare const createBulkActionTasks: (config: CreateBackgroundTasksConfig) => (import("@webiny/tasks").TaskDefinitionPlugin<HcmsBulkActionsContext, IBulkActionOperationByModelInput, IBulkActionOperationByModelOutput> | import("@webiny/tasks").TaskDefinitionPlugin<HcmsBulkActionsContext, IBulkActionOperationInput, IBulkActionOperationOutput>)[];
@@ -6,17 +6,22 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.createBulkActionTasks = void 0;
7
7
  var _tasks = require("@webiny/tasks");
8
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
+
9
12
  class BulkActionTasks {
10
13
  constructor(config) {
11
14
  this.name = config.name;
12
15
  this.dataLoader = config.dataLoader;
13
16
  this.dataProcessor = config.dataProcessor;
17
+ this.batchSize = config.batchSize || BATCH_SIZE;
14
18
  }
15
19
  createListTaskDefinition() {
16
20
  return (0, _tasks.createPrivateTaskDefinition)({
17
21
  id: this.createListTaskDefinitionName(),
18
22
  title: `Headless CMS: list "${this.name}" entries by model`,
19
23
  maxIterations: 500,
24
+ disableDatabaseLogs: true,
20
25
  run: async params => {
21
26
  const {
22
27
  response,
@@ -27,12 +32,26 @@ class BulkActionTasks {
27
32
  if (!input.modelId) {
28
33
  return response.error(`Missing "modelId" in the input.`);
29
34
  }
30
- if (input.processing) {
31
- const processTasks = new _internals.ProcessTasksByModel(this.createProcessTaskDefinitionName());
32
- return await processTasks.execute(params);
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}`);
33
54
  }
34
- const createTasks = new _internals.CreateTasksByModel(this.createProcessTaskDefinitionName(), this.dataLoader(context));
35
- return await createTasks.execute(params);
36
55
  } catch (ex) {
37
56
  return response.error(ex.message ?? "Error while executing list task");
38
57
  }
@@ -41,18 +60,25 @@ class BulkActionTasks {
41
60
  context,
42
61
  task
43
62
  }) => {
44
- /**
45
- * We want to clean all child tasks and logs, which have no errors.
46
- */
47
- const childTasksCleanup = new _internals.ChildTasksCleanup();
48
- try {
49
- await childTasksCleanup.execute({
50
- context,
51
- task
52
- });
53
- } catch (ex) {
54
- console.error("Error while cleaning list child tasks.", ex);
55
- }
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");
56
82
  }
57
83
  });
58
84
  }
@@ -61,6 +87,7 @@ class BulkActionTasks {
61
87
  id: this.createProcessTaskDefinitionName(),
62
88
  title: `Headless CMS: process "${this.name}" entries`,
63
89
  maxIterations: 2,
90
+ disableDatabaseLogs: true,
64
91
  run: async params => {
65
92
  const {
66
93
  response,
@@ -72,23 +99,6 @@ class BulkActionTasks {
72
99
  } catch (ex) {
73
100
  return response.error(ex.message ?? "Error while executing process task");
74
101
  }
75
- },
76
- onDone: async ({
77
- context,
78
- task
79
- }) => {
80
- /**
81
- * We want to clean all child tasks and logs, which have no errors.
82
- */
83
- const childTasksCleanup = new _internals.ChildTasksCleanup();
84
- try {
85
- await childTasksCleanup.execute({
86
- context,
87
- task
88
- });
89
- } catch (ex) {
90
- console.error("Error while cleaning process child tasks.", ex);
91
- }
92
102
  }
93
103
  });
94
104
  }
@@ -98,6 +108,23 @@ class BulkActionTasks {
98
108
  createProcessTaskDefinitionName() {
99
109
  return `hcmsBulkProcess${this.name}Entries`;
100
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
+ }
101
128
  }
102
129
  const createBulkActionTasks = config => {
103
130
  const backgroundTasks = new BulkActionTasks(config);
@@ -1 +1 @@
1
- {"version":3,"names":["_tasks","require","_internals","BulkActionTasks","constructor","config","name","dataLoader","dataProcessor","createListTaskDefinition","createPrivateTaskDefinition","id","createListTaskDefinitionName","title","maxIterations","run","params","response","input","context","modelId","error","processing","processTasks","ProcessTasksByModel","createProcessTaskDefinitionName","execute","createTasks","CreateTasksByModel","ex","message","onDone","task","childTasksCleanup","ChildTasksCleanup","console","createProcessTaskDefinition","processTask","ProcessTask","createBulkActionTasks","backgroundTasks","exports"],"sources":["createBulkActionTasks.ts"],"sourcesContent":["import { createPrivateTaskDefinition } from \"@webiny/tasks\";\nimport { IListEntries, IProcessEntry } from \"~/abstractions\";\nimport {\n ChildTasksCleanup,\n CreateTasksByModel,\n ProcessTask,\n ProcessTasksByModel\n} from \"~/useCases/internals\";\nimport {\n HcmsBulkActionsContext,\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput,\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n} from \"~/types\";\n\nexport interface CreateBackgroundTasksConfig {\n name: string;\n dataLoader: (context: HcmsBulkActionsContext) => IListEntries;\n dataProcessor: (context: HcmsBulkActionsContext) => IProcessEntry;\n}\n\nclass BulkActionTasks {\n private readonly name: string;\n private readonly dataLoader: (context: HcmsBulkActionsContext) => IListEntries;\n private readonly dataProcessor: (context: HcmsBulkActionsContext) => IProcessEntry;\n\n constructor(config: CreateBackgroundTasksConfig) {\n this.name = config.name;\n this.dataLoader = config.dataLoader;\n this.dataProcessor = config.dataProcessor;\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 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 if (input.processing) {\n const processTasks = new ProcessTasksByModel(\n this.createProcessTaskDefinitionName()\n );\n return await processTasks.execute(params);\n }\n\n const createTasks = new CreateTasksByModel(\n this.createProcessTaskDefinitionName(),\n this.dataLoader(context)\n );\n return await createTasks.execute(params);\n } catch (ex) {\n return response.error(ex.message ?? \"Error while executing list task\");\n }\n },\n onDone: async ({ context, task }) => {\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(\"Error while cleaning list child tasks.\", ex);\n }\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 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 onDone: async ({ context, task }) => {\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(\"Error while cleaning process child tasks.\", ex);\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\nexport const createBulkActionTasks = (config: CreateBackgroundTasksConfig) => {\n const backgroundTasks = new BulkActionTasks(config);\n\n return [\n backgroundTasks.createListTaskDefinition(),\n backgroundTasks.createProcessTaskDefinition()\n ];\n};\n"],"mappings":"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","ignoreList":[]}
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 { createPrivateTaskDefinition, ITask } from \"@webiny/tasks\";\nimport { IListEntries, IProcessEntry } from \"~/abstractions\";\nimport {\n ChildTasksCleanup,\n CreateTasksByModel,\n ProcessTask,\n ProcessTasksByModel\n} from \"~/useCases/internals\";\nimport {\n BulkActionOperationByModelAction,\n HcmsBulkActionsContext,\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput,\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n} 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":"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","ignoreList":[]}
@@ -21,7 +21,7 @@ const createBulkActionEntriesTasks = () => {
21
21
  dataProcessor: _useCases.createMoveEntryToTrash
22
22
  }), (0, _plugins.createBulkAction)({
23
23
  name: "publish",
24
- dataLoader: _useCases.createListLatestEntries,
24
+ dataLoader: _useCases.createListNotPublishedEntries,
25
25
  dataProcessor: _useCases.createPublishEntry
26
26
  }), (0, _plugins.createBulkAction)({
27
27
  name: "unpublish",
@@ -1 +1 @@
1
- {"version":3,"names":["_plugins","require","_useCases","createBulkActionEntriesTasks","createBulkAction","name","dataLoader","createListDeletedEntries","dataProcessor","createDeleteEntry","createListLatestEntries","createMoveEntryToFolder","createMoveEntryToTrash","createPublishEntry","createListPublishedEntries","createUnpublishEntry","createRestoreEntryFromTrash","exports"],"sources":["createBulkActionEntriesTasks.ts"],"sourcesContent":["import { createBulkAction } from \"~/plugins\";\nimport {\n createDeleteEntry,\n createListDeletedEntries,\n createListLatestEntries,\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: createListLatestEntries,\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;AAYO,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,EAAEI,iCAAuB;IACnCF,aAAa,EAAEK;EACnB,CAAC,CAAC,EACF,IAAAT,yBAAgB,EAAC;IACbC,IAAI,EAAE,WAAW;IACjBC,UAAU,EAAEQ,oCAA0B;IACtCN,aAAa,EAAEO;EACnB,CAAC,CAAC,EACF,IAAAX,yBAAgB,EAAC;IACbC,IAAI,EAAE,SAAS;IACfC,UAAU,EAAEC,kCAAwB;IACpCC,aAAa,EAAEQ;EACnB,CAAC,CAAC,CACL;AACL,CAAC;AAACC,OAAA,CAAAd,4BAAA,GAAAA,4BAAA","ignoreList":[]}
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":[]}
@@ -19,32 +19,90 @@ const calculateDateTimeString = () => {
19
19
  // Return the calculated date-time string in ISO 8601 format.
20
20
  return currentDate.toISOString();
21
21
  };
22
+ const cleanup = async ({
23
+ context,
24
+ task
25
+ }) => {
26
+ // We want to clean all child tasks and logs, which have no errors.
27
+ const childTasksCleanup = new _internals.ChildTasksCleanup();
28
+ try {
29
+ await childTasksCleanup.execute({
30
+ context,
31
+ task
32
+ });
33
+ } catch (ex) {
34
+ console.error(`Error while cleaning "EmptyTrashBins" child tasks.`, ex);
35
+ }
36
+ };
22
37
  const createEmptyTrashBinsTask = () => {
23
- return (0, _tasks.createTaskDefinition)({
38
+ return (0, _tasks.createPrivateTaskDefinition)({
24
39
  id: "hcmsEntriesEmptyTrashBins",
25
40
  title: "Headless CMS - Empty all trash bins",
26
41
  description: "Delete all entries found in the trash bin, for each model found in the system.",
27
- maxIterations: 1,
42
+ maxIterations: 24,
43
+ disableDatabaseLogs: true,
28
44
  run: async params => {
29
45
  const {
30
46
  response,
31
47
  isAborted,
32
- context
48
+ isCloseToTimeout,
49
+ context,
50
+ trigger,
51
+ input,
52
+ store
33
53
  } = params;
34
- try {
35
- if (isAborted()) {
36
- return response.aborted();
54
+ if (isAborted()) {
55
+ return response.aborted();
56
+ } else if (isCloseToTimeout()) {
57
+ return response.continue({
58
+ ...input
59
+ }, {
60
+ seconds: 30
61
+ });
62
+ }
63
+ if (input.triggered) {
64
+ const {
65
+ items
66
+ } = await context.tasks.listTasks({
67
+ where: {
68
+ parentId: store.getTask().id,
69
+ taskStatus_in: [_tasks.TaskDataStatus.RUNNING, _tasks.TaskDataStatus.PENDING]
70
+ },
71
+ limit: 100000
72
+ });
73
+ if (items.length === 0) {
74
+ return response.done("Task done: emptying the trash bin for all registered models.");
75
+ }
76
+ for (const item of items) {
77
+ const status = await context.tasks.fetchServiceInfo(item.id);
78
+ if (status?.status === "FAILED" || status?.status === "TIMED_OUT") {
79
+ await context.tasks.updateTask(item.id, {
80
+ taskStatus: _tasks.TaskDataStatus.FAILED
81
+ });
82
+ continue;
83
+ }
84
+ if (status?.status === "ABORTED") {
85
+ await context.tasks.updateTask(item.id, {
86
+ taskStatus: _tasks.TaskDataStatus.ABORTED
87
+ });
88
+ }
37
89
  }
90
+ return response.continue({
91
+ ...input
92
+ }, {
93
+ seconds: 3600
94
+ });
95
+ }
96
+ try {
38
97
  const locales = context.i18n.getLocales();
39
98
  await context.i18n.withEachLocale(locales, async () => {
40
99
  const models = await context.security.withoutAuthorization(async () => {
41
100
  return (await context.cms.listModels()).filter(model => !model.isPrivate);
42
101
  });
43
102
  for (const model of models) {
44
- await context.tasks.trigger({
103
+ await trigger({
45
104
  name: `Headless CMS - Empty trash bin for "${model.name}" model.`,
46
105
  definition: "hcmsBulkListDeleteEntries",
47
- parent: params.store.getTask(),
48
106
  input: {
49
107
  modelId: model.modelId,
50
108
  where: {
@@ -53,30 +111,20 @@ const createEmptyTrashBinsTask = () => {
53
111
  }
54
112
  });
55
113
  }
56
- return;
57
114
  });
58
- return response.done(`Task done: emptying the trash bin for all registered models.`);
115
+ return response.continue({
116
+ triggered: true
117
+ }, {
118
+ seconds: 120
119
+ });
59
120
  } catch (ex) {
60
121
  return response.error(ex.message ?? "Error while executing EmptyTrashBins task");
61
122
  }
62
123
  },
63
- onDone: async ({
64
- context,
65
- task
66
- }) => {
67
- /**
68
- * We want to clean all child tasks and logs, which have no errors.
69
- */
70
- const childTasksCleanup = new _internals.ChildTasksCleanup();
71
- try {
72
- await childTasksCleanup.execute({
73
- context,
74
- task
75
- });
76
- } catch (ex) {
77
- console.error("Error while cleaning `EmptyTrashBins` child tasks.", ex);
78
- }
79
- }
124
+ onMaxIterations: cleanup,
125
+ onDone: cleanup,
126
+ onError: cleanup,
127
+ onAbort: cleanup
80
128
  });
81
129
  };
82
130
  exports.createEmptyTrashBinsTask = createEmptyTrashBinsTask;
@@ -1 +1 @@
1
- {"version":3,"names":["_tasks","require","_internals","calculateDateTimeString","retentionPeriodFromEnv","process","env","retentionPeriod","Number","currentDate","Date","setDate","getDate","toISOString","createEmptyTrashBinsTask","createTaskDefinition","id","title","description","maxIterations","run","params","response","isAborted","context","aborted","locales","i18n","getLocales","withEachLocale","models","security","withoutAuthorization","cms","listModels","filter","model","isPrivate","tasks","trigger","name","definition","parent","store","getTask","input","modelId","where","deletedOn_lt","done","ex","error","message","onDone","task","childTasksCleanup","ChildTasksCleanup","execute","console","exports"],"sources":["createEmptyTrashBinsTask.ts"],"sourcesContent":["import { createTaskDefinition } from \"@webiny/tasks\";\nimport { HcmsBulkActionsContext, IBulkActionOperationByModelInput } from \"~/types\";\nimport { ChildTasksCleanup } from \"~/useCases/internals\";\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<HcmsBulkActionsContext>({\n id: \"hcmsEntriesEmptyTrashBins\",\n title: \"Headless CMS - Empty all trash bins\",\n description:\n \"Delete all entries found in the trash bin, for each model found in the system.\",\n maxIterations: 1,\n run: async params => {\n const { response, isAborted, context } = params;\n\n try {\n if (isAborted()) {\n return response.aborted();\n }\n\n const locales = context.i18n.getLocales();\n\n await context.i18n.withEachLocale(locales, async () => {\n const models = await context.security.withoutAuthorization(async () => {\n return (await context.cms.listModels()).filter(model => !model.isPrivate);\n });\n\n for (const model of models) {\n await context.tasks.trigger<IBulkActionOperationByModelInput>({\n name: `Headless CMS - Empty trash bin for \"${model.name}\" model.`,\n definition: \"hcmsBulkListDeleteEntries\",\n parent: params.store.getTask(),\n input: {\n modelId: model.modelId,\n where: {\n deletedOn_lt: calculateDateTimeString()\n }\n }\n });\n }\n return;\n });\n\n return response.done(\n `Task done: emptying the trash bin for all registered models.`\n );\n } catch (ex) {\n return response.error(ex.message ?? \"Error while executing EmptyTrashBins task\");\n }\n },\n onDone: async ({ context, task }) => {\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(\"Error while cleaning `EmptyTrashBins` child tasks.\", ex);\n }\n }\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AAEA,MAAME,uBAAuB,GAAGA,CAAA,KAAM;EAClC;EACA;EACA,MAAMC,sBAAsB,GAAGC,OAAO,CAACC,GAAG,CAAC,wCAAwC,CAAC;EACpF,MAAMC,eAAe,GACjBH,sBAAsB,IAAII,MAAM,CAACJ,sBAAsB,CAAC,KAAK,CAAC,GACxDI,MAAM,CAACJ,sBAAsB,CAAC,GAC9B,EAAE;;EAEZ;EACA,MAAMK,WAAW,GAAG,IAAIC,IAAI,CAAC,CAAC;EAC9BD,WAAW,CAACE,OAAO,CAACF,WAAW,CAACG,OAAO,CAAC,CAAC,GAAGL,eAAe,CAAC;;EAE5D;EACA,OAAOE,WAAW,CAACI,WAAW,CAAC,CAAC;AACpC,CAAC;AAEM,MAAMC,wBAAwB,GAAGA,CAAA,KAAM;EAC1C,OAAO,IAAAC,2BAAoB,EAAyB;IAChDC,EAAE,EAAE,2BAA2B;IAC/BC,KAAK,EAAE,qCAAqC;IAC5CC,WAAW,EACP,gFAAgF;IACpFC,aAAa,EAAE,CAAC;IAChBC,GAAG,EAAE,MAAMC,MAAM,IAAI;MACjB,MAAM;QAAEC,QAAQ;QAAEC,SAAS;QAAEC;MAAQ,CAAC,GAAGH,MAAM;MAE/C,IAAI;QACA,IAAIE,SAAS,CAAC,CAAC,EAAE;UACb,OAAOD,QAAQ,CAACG,OAAO,CAAC,CAAC;QAC7B;QAEA,MAAMC,OAAO,GAAGF,OAAO,CAACG,IAAI,CAACC,UAAU,CAAC,CAAC;QAEzC,MAAMJ,OAAO,CAACG,IAAI,CAACE,cAAc,CAACH,OAAO,EAAE,YAAY;UACnD,MAAMI,MAAM,GAAG,MAAMN,OAAO,CAACO,QAAQ,CAACC,oBAAoB,CAAC,YAAY;YACnE,OAAO,CAAC,MAAMR,OAAO,CAACS,GAAG,CAACC,UAAU,CAAC,CAAC,EAAEC,MAAM,CAACC,KAAK,IAAI,CAACA,KAAK,CAACC,SAAS,CAAC;UAC7E,CAAC,CAAC;UAEF,KAAK,MAAMD,KAAK,IAAIN,MAAM,EAAE;YACxB,MAAMN,OAAO,CAACc,KAAK,CAACC,OAAO,CAAmC;cAC1DC,IAAI,EAAG,uCAAsCJ,KAAK,CAACI,IAAK,UAAS;cACjEC,UAAU,EAAE,2BAA2B;cACvCC,MAAM,EAAErB,MAAM,CAACsB,KAAK,CAACC,OAAO,CAAC,CAAC;cAC9BC,KAAK,EAAE;gBACHC,OAAO,EAAEV,KAAK,CAACU,OAAO;gBACtBC,KAAK,EAAE;kBACHC,YAAY,EAAE7C,uBAAuB,CAAC;gBAC1C;cACJ;YACJ,CAAC,CAAC;UACN;UACA;QACJ,CAAC,CAAC;QAEF,OAAOmB,QAAQ,CAAC2B,IAAI,CACf,8DACL,CAAC;MACL,CAAC,CAAC,OAAOC,EAAE,EAAE;QACT,OAAO5B,QAAQ,CAAC6B,KAAK,CAACD,EAAE,CAACE,OAAO,IAAI,2CAA2C,CAAC;MACpF;IACJ,CAAC;IACDC,MAAM,EAAE,MAAAA,CAAO;MAAE7B,OAAO;MAAE8B;IAAK,CAAC,KAAK;MACjC;AACZ;AACA;MACY,MAAMC,iBAAiB,GAAG,IAAIC,4BAAiB,CAAC,CAAC;MACjD,IAAI;QACA,MAAMD,iBAAiB,CAACE,OAAO,CAAC;UAC5BjC,OAAO;UACP8B;QACJ,CAAC,CAAC;MACN,CAAC,CAAC,OAAOJ,EAAE,EAAE;QACTQ,OAAO,CAACP,KAAK,CAAC,oDAAoD,EAAED,EAAE,CAAC;MAC3E;IACJ;EACJ,CAAC,CAAC;AACN,CAAC;AAACS,OAAA,CAAA7C,wBAAA,GAAAA,wBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_tasks","require","_internals","calculateDateTimeString","retentionPeriodFromEnv","process","env","retentionPeriod","Number","currentDate","Date","setDate","getDate","toISOString","cleanup","context","task","childTasksCleanup","ChildTasksCleanup","execute","ex","console","error","createEmptyTrashBinsTask","createPrivateTaskDefinition","id","title","description","maxIterations","disableDatabaseLogs","run","params","response","isAborted","isCloseToTimeout","trigger","input","store","aborted","continue","seconds","triggered","items","tasks","listTasks","where","parentId","getTask","taskStatus_in","TaskDataStatus","RUNNING","PENDING","limit","length","done","item","status","fetchServiceInfo","updateTask","taskStatus","FAILED","ABORTED","locales","i18n","getLocales","withEachLocale","models","security","withoutAuthorization","cms","listModels","filter","model","isPrivate","name","definition","modelId","deletedOn_lt","message","onMaxIterations","onDone","onError","onAbort","exports"],"sources":["createEmptyTrashBinsTask.ts"],"sourcesContent":["import { createPrivateTaskDefinition, TaskDataStatus } from \"@webiny/tasks\";\nimport {\n HcmsBulkActionsContext,\n IBulkActionOperationByModelInput,\n TrashBinCleanUpParams\n} from \"~/types\";\nimport { ChildTasksCleanup } from \"~/useCases/internals\";\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\nconst cleanup = async ({ context, task }: TrashBinCleanUpParams) => {\n // We want to clean all child tasks and logs, which have no errors.\n const childTasksCleanup = new ChildTasksCleanup();\n try {\n await childTasksCleanup.execute({\n context,\n task\n });\n } catch (ex) {\n console.error(`Error while cleaning \"EmptyTrashBins\" child tasks.`, ex);\n }\n};\n\nexport const createEmptyTrashBinsTask = () => {\n return createPrivateTaskDefinition<HcmsBulkActionsContext>({\n id: \"hcmsEntriesEmptyTrashBins\",\n title: \"Headless CMS - Empty all trash bins\",\n description:\n \"Delete all entries found in the trash bin, for each model found in the system.\",\n maxIterations: 24,\n disableDatabaseLogs: true,\n run: async params => {\n const { response, isAborted, isCloseToTimeout, context, trigger, input, store } =\n params;\n if (isAborted()) {\n return response.aborted();\n } else if (isCloseToTimeout()) {\n return response.continue(\n {\n ...input\n },\n {\n seconds: 30\n }\n );\n }\n\n if (input.triggered) {\n const { items } = await context.tasks.listTasks({\n where: {\n parentId: store.getTask().id,\n taskStatus_in: [TaskDataStatus.RUNNING, TaskDataStatus.PENDING]\n },\n limit: 100000\n });\n\n if (items.length === 0) {\n return response.done(\n \"Task done: emptying the trash bin for all registered models.\"\n );\n }\n\n for (const item of items) {\n const status = await context.tasks.fetchServiceInfo(item.id);\n\n if (status?.status === \"FAILED\" || status?.status === \"TIMED_OUT\") {\n await context.tasks.updateTask(item.id, {\n taskStatus: TaskDataStatus.FAILED\n });\n continue;\n }\n\n if (status?.status === \"ABORTED\") {\n await context.tasks.updateTask(item.id, {\n taskStatus: TaskDataStatus.ABORTED\n });\n }\n }\n\n return response.continue(\n {\n ...input\n },\n {\n seconds: 3600\n }\n );\n }\n\n try {\n const locales = context.i18n.getLocales();\n\n await context.i18n.withEachLocale(locales, async () => {\n const models = await context.security.withoutAuthorization(async () => {\n return (await context.cms.listModels()).filter(model => !model.isPrivate);\n });\n\n for (const model of models) {\n await trigger<IBulkActionOperationByModelInput>({\n name: `Headless CMS - Empty trash bin for \"${model.name}\" model.`,\n definition: \"hcmsBulkListDeleteEntries\",\n input: {\n modelId: model.modelId,\n where: {\n deletedOn_lt: calculateDateTimeString()\n }\n }\n });\n }\n });\n\n return response.continue(\n {\n triggered: true\n },\n {\n seconds: 120\n }\n );\n } catch (ex) {\n return response.error(ex.message ?? \"Error while executing EmptyTrashBins task\");\n }\n },\n onMaxIterations: cleanup,\n onDone: cleanup,\n onError: cleanup,\n onAbort: cleanup\n });\n};\n"],"mappings":"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","ignoreList":[]}
package/tasks/index.d.ts CHANGED
@@ -1 +1,2 @@
1
- export declare const createTasks: () => ((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>)[])[][] | import("@webiny/tasks").TaskDefinitionPlugin<import("../types").HcmsBulkActionsContext, any, import("@webiny/tasks").ITaskResponseDoneResultOutput>)[];
1
+ export * from "./createBulkActionEntriesTasks";
2
+ export * from "./createEmptyTrashBinsTask";
package/tasks/index.js CHANGED
@@ -3,12 +3,27 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createTasks = void 0;
7
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
+ });
8
17
  var _createEmptyTrashBinsTask = require("./createEmptyTrashBinsTask");
9
- const createTasks = () => {
10
- return [(0, _createBulkActionEntriesTasks.createBulkActionEntriesTasks)(), (0, _createEmptyTrashBinsTask.createEmptyTrashBinsTask)()];
11
- };
12
- exports.createTasks = createTasks;
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
+ });
13
28
 
14
29
  //# sourceMappingURL=index.js.map