@webiny/api-headless-cms-bulk-actions 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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms-bulk-actions",
3
- "version": "5.41.4",
3
+ "version": "5.42.0-beta.1",
4
4
  "main": "index.js",
5
5
  "description": "Webiny Headless CMS bulk actions",
6
6
  "keywords": [
@@ -13,30 +13,25 @@
13
13
  },
14
14
  "license": "MIT",
15
15
  "dependencies": {
16
- "@webiny/api-headless-cms": "5.41.4",
17
- "@webiny/handler": "5.41.4",
18
- "@webiny/handler-aws": "5.41.4",
19
- "@webiny/tasks": "5.41.4",
20
- "@webiny/utils": "5.41.4"
16
+ "@webiny/api-headless-cms": "5.42.0-beta.1",
17
+ "@webiny/handler": "5.42.0-beta.1",
18
+ "@webiny/handler-aws": "5.42.0-beta.1",
19
+ "@webiny/tasks": "5.42.0-beta.1",
20
+ "@webiny/utils": "5.42.0-beta.1"
21
21
  },
22
22
  "devDependencies": {
23
- "@babel/cli": "7.24.1",
24
- "@babel/core": "7.24.3",
25
- "@babel/preset-env": "7.24.3",
26
- "@babel/preset-typescript": "7.24.1",
27
- "@babel/runtime": "7.24.1",
28
- "@webiny/api": "5.41.4",
29
- "@webiny/api-admin-users": "5.41.4",
30
- "@webiny/api-i18n": "5.41.4",
31
- "@webiny/api-security": "5.41.4",
32
- "@webiny/api-tenancy": "5.41.4",
33
- "@webiny/api-wcp": "5.41.4",
34
- "@webiny/cli": "5.41.4",
35
- "@webiny/handler-graphql": "5.41.4",
36
- "@webiny/plugins": "5.41.4",
37
- "@webiny/project-utils": "5.41.4",
38
- "@webiny/wcp": "5.41.4",
39
- "graphql": "15.8.0",
23
+ "@webiny/api": "5.42.0-beta.1",
24
+ "@webiny/api-admin-users": "5.42.0-beta.1",
25
+ "@webiny/api-i18n": "5.42.0-beta.1",
26
+ "@webiny/api-security": "5.42.0-beta.1",
27
+ "@webiny/api-tenancy": "5.42.0-beta.1",
28
+ "@webiny/api-wcp": "5.42.0-beta.1",
29
+ "@webiny/cli": "5.42.0-beta.1",
30
+ "@webiny/handler-graphql": "5.42.0-beta.1",
31
+ "@webiny/plugins": "5.42.0-beta.1",
32
+ "@webiny/project-utils": "5.42.0-beta.1",
33
+ "@webiny/wcp": "5.42.0-beta.1",
34
+ "graphql": "15.9.0",
40
35
  "ttypescript": "1.5.15",
41
36
  "typescript": "4.9.5"
42
37
  },
@@ -48,5 +43,5 @@
48
43
  "access": "public",
49
44
  "directory": "dist"
50
45
  },
51
- "gitHead": "94922b33af59db5afe75127bb07443ce7f1448c4"
46
+ "gitHead": "5e69da579efa4f2c8268e0c97ac6407ddc3f5f07"
52
47
  }
@@ -7,16 +7,29 @@ exports.createBulkActionGraphQL = void 0;
7
7
  var _api = require("@webiny/api");
8
8
  var _apiHeadlessCms = require("@webiny/api-headless-cms");
9
9
  var _handlerGraphql = require("@webiny/handler-graphql");
10
+ var _constants = require("@webiny/api-headless-cms/constants");
10
11
  const createBulkActionGraphQL = config => {
11
- return new _api.ContextPlugin(async context => {
12
- const tenant = context.tenancy.getCurrentTenant();
13
- const locale = context.i18n.getContentLocale();
14
- if (!locale || !(await (0, _apiHeadlessCms.isHeadlessCmsReady)(context))) {
12
+ return new _api.ContextPlugin(async ctx => {
13
+ const tenant = ctx.tenancy.getCurrentTenant();
14
+ const locale = ctx.i18n.getContentLocale();
15
+ if (!locale || !(await (0, _apiHeadlessCms.isHeadlessCmsReady)(ctx))) {
15
16
  return;
16
17
  }
17
- const models = await context.security.withoutAuthorization(async () => {
18
- const allModels = await context.cms.listModels();
19
- return allModels.filter(model => !model.isPrivate && (!config.modelIds?.length || config.modelIds.includes(model.modelId)));
18
+ const models = await ctx.security.withoutAuthorization(async () => {
19
+ const allModels = await ctx.cms.listModels();
20
+ return allModels.filter(model => {
21
+ if (model.isPrivate) {
22
+ return false;
23
+ }
24
+ const tags = Array.isArray(model.tags) ? model.tags : [];
25
+ if (tags.includes(_constants.CMS_MODEL_SINGLETON_TAG)) {
26
+ return false;
27
+ }
28
+ if (config.modelIds?.length) {
29
+ return config.modelIds.includes(model.modelId);
30
+ }
31
+ return true;
32
+ });
20
33
  });
21
34
  const plugins = [];
22
35
  models.forEach(model => {
@@ -28,7 +41,7 @@ const createBulkActionGraphQL = config => {
28
41
  `,
29
42
  resolvers: {
30
43
  Mutation: {
31
- [`bulkAction${model.singularApiName}`]: async (_, args) => {
44
+ [`bulkAction${model.singularApiName}`]: async (_, args, context) => {
32
45
  const identity = context.security.getIdentity();
33
46
  const response = await context.tasks.trigger({
34
47
  definition: `hcmsBulkList${args.action}Entries`,
@@ -51,7 +64,7 @@ const createBulkActionGraphQL = config => {
51
64
  plugin.name = `headless-cms.graphql.schema.bulkAction.${model.modelId}.${config.name}`;
52
65
  plugins.push(plugin);
53
66
  });
54
- context.plugins.register([...plugins]);
67
+ ctx.plugins.register([...plugins]);
55
68
  });
56
69
  };
57
70
  exports.createBulkActionGraphQL = createBulkActionGraphQL;
@@ -1 +1 @@
1
- {"version":3,"names":["_api","require","_apiHeadlessCms","_handlerGraphql","createBulkActionGraphQL","config","ContextPlugin","context","tenant","tenancy","getCurrentTenant","locale","i18n","getContentLocale","isHeadlessCmsReady","models","security","withoutAuthorization","allModels","cms","listModels","filter","model","isPrivate","modelIds","length","includes","modelId","plugins","forEach","plugin","CmsGraphQLSchemaPlugin","typeDefs","singularApiName","name","resolvers","Mutation","_","args","identity","getIdentity","response","tasks","trigger","definition","action","input","where","search","data","Response","id","isApplicable","code","push","register","exports"],"sources":["createBulkActionGraphQL.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { HcmsBulkActionsContext } from \"~/types\";\nimport { CmsGraphQLSchemaPlugin, isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport { Response } from \"@webiny/handler-graphql\";\n\nexport interface CreateBulkActionGraphQL {\n name: string;\n modelIds?: string[];\n}\n\nexport const createBulkActionGraphQL = (config: CreateBulkActionGraphQL) => {\n return new ContextPlugin<HcmsBulkActionsContext>(async context => {\n const tenant = context.tenancy.getCurrentTenant();\n const locale = context.i18n.getContentLocale();\n\n if (!locale || !(await isHeadlessCmsReady(context))) {\n return;\n }\n\n const models = await context.security.withoutAuthorization(async () => {\n const allModels = await context.cms.listModels();\n return allModels.filter(\n model =>\n !model.isPrivate &&\n (!config.modelIds?.length || config.modelIds.includes(model.modelId))\n );\n });\n\n const plugins: CmsGraphQLSchemaPlugin<HcmsBulkActionsContext>[] = [];\n\n models.forEach(model => {\n const plugin = new CmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n extend enum BulkAction${model.singularApiName}Name {\n ${config.name}\n }\n `,\n resolvers: {\n Mutation: {\n [`bulkAction${model.singularApiName}`]: async (_, args) => {\n const identity = context.security.getIdentity();\n\n const response = await context.tasks.trigger({\n definition: `hcmsBulkList${args.action}Entries`,\n input: {\n modelId: model.modelId,\n where: args.where,\n search: args.search,\n data: args.data,\n identity\n }\n });\n\n return new Response({\n id: response.id\n });\n }\n }\n },\n isApplicable: context =>\n context.tenancy.getCurrentTenant().id === tenant.id &&\n context.i18n.getContentLocale()?.code === locale.code\n });\n\n plugin.name = `headless-cms.graphql.schema.bulkAction.${model.modelId}.${config.name}`;\n plugins.push(plugin);\n });\n\n context.plugins.register([...plugins]);\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAF,OAAA;AAOO,MAAMG,uBAAuB,GAAIC,MAA+B,IAAK;EACxE,OAAO,IAAIC,kBAAa,CAAyB,MAAMC,OAAO,IAAI;IAC9D,MAAMC,MAAM,GAAGD,OAAO,CAACE,OAAO,CAACC,gBAAgB,CAAC,CAAC;IACjD,MAAMC,MAAM,GAAGJ,OAAO,CAACK,IAAI,CAACC,gBAAgB,CAAC,CAAC;IAE9C,IAAI,CAACF,MAAM,IAAI,EAAE,MAAM,IAAAG,kCAAkB,EAACP,OAAO,CAAC,CAAC,EAAE;MACjD;IACJ;IAEA,MAAMQ,MAAM,GAAG,MAAMR,OAAO,CAACS,QAAQ,CAACC,oBAAoB,CAAC,YAAY;MACnE,MAAMC,SAAS,GAAG,MAAMX,OAAO,CAACY,GAAG,CAACC,UAAU,CAAC,CAAC;MAChD,OAAOF,SAAS,CAACG,MAAM,CACnBC,KAAK,IACD,CAACA,KAAK,CAACC,SAAS,KACf,CAAClB,MAAM,CAACmB,QAAQ,EAAEC,MAAM,IAAIpB,MAAM,CAACmB,QAAQ,CAACE,QAAQ,CAACJ,KAAK,CAACK,OAAO,CAAC,CAC5E,CAAC;IACL,CAAC,CAAC;IAEF,MAAMC,OAAyD,GAAG,EAAE;IAEpEb,MAAM,CAACc,OAAO,CAACP,KAAK,IAAI;MACpB,MAAMQ,MAAM,GAAG,IAAIC,sCAAsB,CAAC;QACtCC,QAAQ,EAAE,aAAe;AACzC,6CAA6CV,KAAK,CAACW,eAAgB;AACnE,0BAA0B5B,MAAM,CAAC6B,IAAK;AACtC;AACA,iBAAiB;QACDC,SAAS,EAAE;UACPC,QAAQ,EAAE;YACN,CAAE,aAAYd,KAAK,CAACW,eAAgB,EAAC,GAAG,OAAOI,CAAC,EAAEC,IAAI,KAAK;cACvD,MAAMC,QAAQ,GAAGhC,OAAO,CAACS,QAAQ,CAACwB,WAAW,CAAC,CAAC;cAE/C,MAAMC,QAAQ,GAAG,MAAMlC,OAAO,CAACmC,KAAK,CAACC,OAAO,CAAC;gBACzCC,UAAU,EAAG,eAAcN,IAAI,CAACO,MAAO,SAAQ;gBAC/CC,KAAK,EAAE;kBACHnB,OAAO,EAAEL,KAAK,CAACK,OAAO;kBACtBoB,KAAK,EAAET,IAAI,CAACS,KAAK;kBACjBC,MAAM,EAAEV,IAAI,CAACU,MAAM;kBACnBC,IAAI,EAAEX,IAAI,CAACW,IAAI;kBACfV;gBACJ;cACJ,CAAC,CAAC;cAEF,OAAO,IAAIW,wBAAQ,CAAC;gBAChBC,EAAE,EAAEV,QAAQ,CAACU;cACjB,CAAC,CAAC;YACN;UACJ;QACJ,CAAC;QACDC,YAAY,EAAE7C,OAAO,IACjBA,OAAO,CAACE,OAAO,CAACC,gBAAgB,CAAC,CAAC,CAACyC,EAAE,KAAK3C,MAAM,CAAC2C,EAAE,IACnD5C,OAAO,CAACK,IAAI,CAACC,gBAAgB,CAAC,CAAC,EAAEwC,IAAI,KAAK1C,MAAM,CAAC0C;MACzD,CAAC,CAAC;MAEFvB,MAAM,CAACI,IAAI,GAAI,0CAAyCZ,KAAK,CAACK,OAAQ,IAAGtB,MAAM,CAAC6B,IAAK,EAAC;MACtFN,OAAO,CAAC0B,IAAI,CAACxB,MAAM,CAAC;IACxB,CAAC,CAAC;IAEFvB,OAAO,CAACqB,OAAO,CAAC2B,QAAQ,CAAC,CAAC,GAAG3B,OAAO,CAAC,CAAC;EAC1C,CAAC,CAAC;AACN,CAAC;AAAC4B,OAAA,CAAApD,uBAAA,GAAAA,uBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_api","require","_apiHeadlessCms","_handlerGraphql","_constants","createBulkActionGraphQL","config","ContextPlugin","ctx","tenant","tenancy","getCurrentTenant","locale","i18n","getContentLocale","isHeadlessCmsReady","models","security","withoutAuthorization","allModels","cms","listModels","filter","model","isPrivate","tags","Array","isArray","includes","CMS_MODEL_SINGLETON_TAG","modelIds","length","modelId","plugins","forEach","plugin","CmsGraphQLSchemaPlugin","typeDefs","singularApiName","name","resolvers","Mutation","_","args","context","identity","getIdentity","response","tasks","trigger","definition","action","input","where","search","data","Response","id","isApplicable","code","push","register","exports"],"sources":["createBulkActionGraphQL.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { HcmsBulkActionsContext } from \"~/types\";\nimport { CmsGraphQLSchemaPlugin, isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport { Response } from \"@webiny/handler-graphql\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"@webiny/api-headless-cms/constants\";\n\nexport interface CreateBulkActionGraphQL {\n name: string;\n modelIds?: string[];\n}\n\nexport const createBulkActionGraphQL = (config: CreateBulkActionGraphQL) => {\n return new ContextPlugin<HcmsBulkActionsContext>(async ctx => {\n const tenant = ctx.tenancy.getCurrentTenant();\n const locale = ctx.i18n.getContentLocale();\n\n if (!locale || !(await isHeadlessCmsReady(ctx))) {\n return;\n }\n\n const models = await ctx.security.withoutAuthorization(async () => {\n const allModels = await ctx.cms.listModels();\n return allModels.filter(model => {\n if (model.isPrivate) {\n return false;\n }\n const tags = Array.isArray(model.tags) ? model.tags : [];\n if (tags.includes(CMS_MODEL_SINGLETON_TAG)) {\n return false;\n }\n if (config.modelIds?.length) {\n return config.modelIds.includes(model.modelId);\n }\n return true;\n });\n });\n\n const plugins: CmsGraphQLSchemaPlugin<HcmsBulkActionsContext>[] = [];\n\n models.forEach(model => {\n const plugin = new CmsGraphQLSchemaPlugin<HcmsBulkActionsContext>({\n typeDefs: /* GraphQL */ `\n extend enum BulkAction${model.singularApiName}Name {\n ${config.name}\n }\n `,\n resolvers: {\n Mutation: {\n [`bulkAction${model.singularApiName}`]: async (_, args, context) => {\n const identity = context.security.getIdentity();\n\n const response = await context.tasks.trigger({\n definition: `hcmsBulkList${args.action}Entries`,\n input: {\n modelId: model.modelId,\n where: args.where,\n search: args.search,\n data: args.data,\n identity\n }\n });\n\n return new Response({\n id: response.id\n });\n }\n }\n },\n isApplicable: context =>\n context.tenancy.getCurrentTenant().id === tenant.id &&\n context.i18n.getContentLocale()?.code === locale.code\n });\n\n plugin.name = `headless-cms.graphql.schema.bulkAction.${model.modelId}.${config.name}`;\n plugins.push(plugin);\n });\n\n ctx.plugins.register([...plugins]);\n });\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_tasks","require","_internals","_types","BATCH_SIZE","BulkActionTasks","constructor","config","name","dataLoader","dataProcessor","batchSize","createListTaskDefinition","createPrivateTaskDefinition","id","createListTaskDefinitionName","title","maxIterations","disableDatabaseLogs","run","params","response","input","context","modelId","error","action","getCurrentAction","BulkActionOperationByModelAction","PROCESS_SUBTASKS","processTasks","ProcessTasksByModel","createProcessTaskDefinitionName","execute","CREATE_SUBTASKS","CHECK_MORE_SUBTASKS","createTasks","CreateTasksByModel","END_TASK","done","ex","message","onDone","task","onCreateListTaskDefinitionFinish","onError","onAbort","onMaxIterations","createProcessTaskDefinition","processTask","ProcessTask","cause","childTasksCleanup","ChildTasksCleanup","console","createBulkActionTasks","backgroundTasks","exports"],"sources":["createBulkActionTasks.ts"],"sourcesContent":["import { 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":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AAMA,IAAAE,MAAA,GAAAF,OAAA;AAgBA,MAAMG,UAAU,GAAG,GAAG,CAAC,CAAC;;AAExB,MAAMC,eAAe,CAAC;EAMlBC,WAAWA,CAACC,MAAmC,EAAE;IAC7C,IAAI,CAACC,IAAI,GAAGD,MAAM,CAACC,IAAI;IACvB,IAAI,CAACC,UAAU,GAAGF,MAAM,CAACE,UAAU;IACnC,IAAI,CAACC,aAAa,GAAGH,MAAM,CAACG,aAAa;IACzC,IAAI,CAACC,SAAS,GAAGJ,MAAM,CAACI,SAAS,IAAIP,UAAU;EACnD;EAEOQ,wBAAwBA,CAAA,EAAG;IAC9B,OAAO,IAAAC,kCAA2B,EAIhC;MACEC,EAAE,EAAE,IAAI,CAACC,4BAA4B,CAAC,CAAC;MACvCC,KAAK,EAAG,uBAAsB,IAAI,CAACR,IAAK,oBAAmB;MAC3DS,aAAa,EAAE,GAAG;MAClBC,mBAAmB,EAAE,IAAI;MACzBC,GAAG,EAAE,MAAMC,MAAM,IAAI;QACjB,MAAM;UAAEC,QAAQ;UAAEC,KAAK;UAAEC;QAAQ,CAAC,GAAGH,MAAM;QAE3C,IAAI;UACA,IAAI,CAACE,KAAK,CAACE,OAAO,EAAE;YAChB,OAAOH,QAAQ,CAACI,KAAK,CAAE,iCAAgC,CAAC;UAC5D;UAEA,MAAMC,MAAM,GAAG,IAAI,CAACC,gBAAgB,CAACL,KAAK,CAAC;UAE3C,QAAQI,MAAM;YACV,KAAKE,uCAAgC,CAACC,gBAAgB;cAAE;gBACpD,MAAMC,YAAY,GAAG,IAAIC,8BAAmB,CACxC,IAAI,CAACC,+BAA+B,CAAC,CACzC,CAAC;gBACD,OAAO,MAAMF,YAAY,CAACG,OAAO,CAACb,MAAM,CAAC;cAC7C;YACA,KAAKQ,uCAAgC,CAACM,eAAe;YACrD,KAAKN,uCAAgC,CAACO,mBAAmB;cAAE;gBACvD,MAAMC,WAAW,GAAG,IAAIC,6BAAkB,CACtC,IAAI,CAACL,+BAA+B,CAAC,CAAC,EACtC,IAAI,CAACvB,UAAU,CAACc,OAAO,CAAC,EACxB,IAAI,CAACZ,SACT,CAAC;gBACD,OAAO,MAAMyB,WAAW,CAACH,OAAO,CAACb,MAAM,CAAC;cAC5C;YACA,KAAKQ,uCAAgC,CAACU,QAAQ;cAAE;gBAC5C,OAAOjB,QAAQ,CAACkB,IAAI,CACf,oBAAmB,IAAI,CAACP,+BAA+B,CAAC,CAAE,uDACvDV,KAAK,CAACE,OACT,UACL,CAAC;cACL;YACA;cACI,OAAOH,QAAQ,CAACI,KAAK,CAAE,mBAAkBC,MAAO,EAAC,CAAC;UAC1D;QACJ,CAAC,CAAC,OAAOc,EAAE,EAAE;UACT,OAAOnB,QAAQ,CAACI,KAAK,CAACe,EAAE,CAACC,OAAO,IAAI,iCAAiC,CAAC;QAC1E;MACJ,CAAC;MACDC,MAAM,EAAE,MAAAA,CAAO;QAAEnB,OAAO;QAAEoB;MAAK,CAAC,KAAK;QACjC,MAAM,IAAI,CAACC,gCAAgC,CAACrB,OAAO,EAAEoB,IAAI,EAAE,MAAM,CAAC;MACtE,CAAC;MACDE,OAAO,EAAE,MAAAA,CAAO;QAAEtB,OAAO;QAAEoB;MAAK,CAAC,KAAK;QAClC,MAAM,IAAI,CAACC,gCAAgC,CAACrB,OAAO,EAAEoB,IAAI,EAAE,OAAO,CAAC;MACvE,CAAC;MACDG,OAAO,EAAE,MAAAA,CAAO;QAAEvB,OAAO;QAAEoB;MAAK,CAAC,KAAK;QAClC,MAAM,IAAI,CAACC,gCAAgC,CAACrB,OAAO,EAAEoB,IAAI,EAAE,OAAO,CAAC;MACvE,CAAC;MACDI,eAAe,EAAE,MAAAA,CAAO;QAAExB,OAAO;QAAEoB;MAAK,CAAC,KAAK;QAC1C,MAAM,IAAI,CAACC,gCAAgC,CAACrB,OAAO,EAAEoB,IAAI,EAAE,eAAe,CAAC;MAC/E;IACJ,CAAC,CAAC;EACN;EAEOK,2BAA2BA,CAAA,EAAG;IACjC,OAAO,IAAAnC,kCAA2B,EAIhC;MACEC,EAAE,EAAE,IAAI,CAACkB,+BAA+B,CAAC,CAAC;MAC1ChB,KAAK,EAAG,0BAAyB,IAAI,CAACR,IAAK,WAAU;MACrDS,aAAa,EAAE,CAAC;MAChBC,mBAAmB,EAAE,IAAI;MACzBC,GAAG,EAAE,MAAMC,MAAM,IAAI;QACjB,MAAM;UAAEC,QAAQ;UAAEE;QAAQ,CAAC,GAAGH,MAAM;QAEpC,IAAI;UACA,MAAM6B,WAAW,GAAG,IAAIC,sBAAW,CAAC,IAAI,CAACxC,aAAa,CAACa,OAAO,CAAC,CAAC;UAChE,OAAO,MAAM0B,WAAW,CAAChB,OAAO,CAACb,MAAM,CAAC;QAC5C,CAAC,CAAC,OAAOoB,EAAE,EAAE;UACT,OAAOnB,QAAQ,CAACI,KAAK,CAACe,EAAE,CAACC,OAAO,IAAI,oCAAoC,CAAC;QAC7E;MACJ;IACJ,CAAC,CAAC;EACN;EAEQ1B,4BAA4BA,CAAA,EAAG;IACnC,OAAQ,eAAc,IAAI,CAACP,IAAK,SAAQ;EAC5C;EAEQwB,+BAA+BA,CAAA,EAAG;IACtC,OAAQ,kBAAiB,IAAI,CAACxB,IAAK,SAAQ;EAC/C;EAEQmB,gBAAgBA,CAACL,KAAuC,EAAE;IAC9D,OAAOA,KAAK,CAACI,MAAM,IAAIE,uCAAgC,CAACM,eAAe;EAC3E;EAEA,MAAcU,gCAAgCA,CAC1CrB,OAA+B,EAC/BoB,IAAW,EACXQ,KAAa,EACf;IACE;AACR;AACA;IACQ,MAAMC,iBAAiB,GAAG,IAAIC,4BAAiB,CAAC,CAAC;IACjD,IAAI;MACA,MAAMD,iBAAiB,CAACnB,OAAO,CAAC;QAC5BV,OAAO;QACPoB;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOH,EAAE,EAAE;MACTc,OAAO,CAAC7B,KAAK,CACR,yBAAwB,IAAI,CAACV,4BAA4B,CAAC,CAAE,kBAAiBoC,KAAM,IAAG,EACvFX,EACJ,CAAC;IACL;EACJ;AACJ;AAEO,MAAMe,qBAAqB,GAAIhD,MAAmC,IAAK;EAC1E,MAAMiD,eAAe,GAAG,IAAInD,eAAe,CAACE,MAAM,CAAC;EAEnD,OAAO,CACHiD,eAAe,CAAC5C,wBAAwB,CAAC,CAAC,EAC1C4C,eAAe,CAACR,2BAA2B,CAAC,CAAC,CAChD;AACL,CAAC;AAACS,OAAA,CAAAF,qBAAA,GAAAA,qBAAA","ignoreList":[]}
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":[]}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.createDefaultGraphQL = void 0;
7
7
  var _api = require("@webiny/api");
8
8
  var _apiHeadlessCms = require("@webiny/api-headless-cms");
9
+ var _constants = require("@webiny/api-headless-cms/constants");
9
10
  const createDefaultGraphQL = () => {
10
11
  return new _api.ContextPlugin(async context => {
11
12
  const tenant = context.tenancy.getCurrentTenant();
@@ -28,7 +29,16 @@ const createDefaultGraphQL = () => {
28
29
  defaultPlugin.name = `headless-cms.graphql.schema.bulkAction.default`;
29
30
  const models = await context.security.withoutAuthorization(async () => {
30
31
  const allModels = await context.cms.listModels();
31
- return allModels.filter(model => !model.isPrivate);
32
+ return allModels.filter(model => {
33
+ if (model.isPrivate) {
34
+ return false;
35
+ }
36
+ const tags = Array.isArray(model.tags) ? model.tags : [];
37
+ if (tags.includes(_constants.CMS_MODEL_SINGLETON_TAG)) {
38
+ return false;
39
+ }
40
+ return true;
41
+ });
32
42
  });
33
43
  const modelPlugins = [];
34
44
  models.forEach(model => {
@@ -1 +1 @@
1
- {"version":3,"names":["_api","require","_apiHeadlessCms","createDefaultGraphQL","ContextPlugin","context","tenant","tenancy","getCurrentTenant","locale","i18n","getContentLocale","isHeadlessCmsReady","defaultPlugin","CmsGraphQLSchemaPlugin","typeDefs","name","models","security","withoutAuthorization","allModels","cms","listModels","filter","model","isPrivate","modelPlugins","forEach","plugin","singularApiName","isApplicable","id","code","modelId","push","plugins","register","exports"],"sources":["createDefaultGraphQL.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { HcmsBulkActionsContext } from \"~/types\";\nimport { CmsGraphQLSchemaPlugin, isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\n\nexport const createDefaultGraphQL = () => {\n return new ContextPlugin<HcmsBulkActionsContext>(async context => {\n const tenant = context.tenancy.getCurrentTenant();\n const locale = context.i18n.getContentLocale();\n\n if (!locale || !(await isHeadlessCmsReady(context))) {\n return;\n }\n\n const defaultPlugin = new CmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type BulkActionResponseData {\n id: String\n }\n\n type BulkActionResponse {\n data: BulkActionResponseData\n error: CmsError\n }\n `\n });\n defaultPlugin.name = `headless-cms.graphql.schema.bulkAction.default`;\n\n const models = await context.security.withoutAuthorization(async () => {\n const allModels = await context.cms.listModels();\n return allModels.filter(model => !model.isPrivate);\n });\n\n const modelPlugins: CmsGraphQLSchemaPlugin<HcmsBulkActionsContext>[] = [];\n\n models.forEach(model => {\n const plugin = new CmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n enum BulkAction${model.singularApiName}Name {\n _empty\n }\n \n extend type Mutation {\n bulkAction${model.singularApiName}(\n action: BulkAction${model.singularApiName}Name!\n where: ${model.singularApiName}ListWhereInput\n search: String\n data: JSON\n ): BulkActionResponse\n }\n `,\n isApplicable: context =>\n context.tenancy.getCurrentTenant().id === tenant.id &&\n context.i18n.getContentLocale()?.code === locale.code\n });\n\n plugin.name = `headless-cms.graphql.schema.bulkAction.default.${model.modelId}`;\n modelPlugins.push(plugin);\n });\n\n context.plugins.register([defaultPlugin, ...modelPlugins]);\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AAEO,MAAME,oBAAoB,GAAGA,CAAA,KAAM;EACtC,OAAO,IAAIC,kBAAa,CAAyB,MAAMC,OAAO,IAAI;IAC9D,MAAMC,MAAM,GAAGD,OAAO,CAACE,OAAO,CAACC,gBAAgB,CAAC,CAAC;IACjD,MAAMC,MAAM,GAAGJ,OAAO,CAACK,IAAI,CAACC,gBAAgB,CAAC,CAAC;IAE9C,IAAI,CAACF,MAAM,IAAI,EAAE,MAAM,IAAAG,kCAAkB,EAACP,OAAO,CAAC,CAAC,EAAE;MACjD;IACJ;IAEA,MAAMQ,aAAa,GAAG,IAAIC,sCAAsB,CAAC;MAC7CC,QAAQ,EAAE,aAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,CAAC,CAAC;IACFF,aAAa,CAACG,IAAI,GAAI,gDAA+C;IAErE,MAAMC,MAAM,GAAG,MAAMZ,OAAO,CAACa,QAAQ,CAACC,oBAAoB,CAAC,YAAY;MACnE,MAAMC,SAAS,GAAG,MAAMf,OAAO,CAACgB,GAAG,CAACC,UAAU,CAAC,CAAC;MAChD,OAAOF,SAAS,CAACG,MAAM,CAACC,KAAK,IAAI,CAACA,KAAK,CAACC,SAAS,CAAC;IACtD,CAAC,CAAC;IAEF,MAAMC,YAA8D,GAAG,EAAE;IAEzET,MAAM,CAACU,OAAO,CAACH,KAAK,IAAI;MACpB,MAAMI,MAAM,GAAG,IAAId,sCAAsB,CAAC;QACtCC,QAAQ,EAAE,aAAe;AACzC,qCAAqCS,KAAK,CAACK,eAAgB;AAC3D;AACA;AACA;AACA;AACA,oCAAoCL,KAAK,CAACK,eAAgB;AAC1D,gDAAgDL,KAAK,CAACK,eAAgB;AACtE,qCAAqCL,KAAK,CAACK,eAAgB;AAC3D;AACA;AACA;AACA;AACA,iBAAiB;QACDC,YAAY,EAAEzB,OAAO,IACjBA,OAAO,CAACE,OAAO,CAACC,gBAAgB,CAAC,CAAC,CAACuB,EAAE,KAAKzB,MAAM,CAACyB,EAAE,IACnD1B,OAAO,CAACK,IAAI,CAACC,gBAAgB,CAAC,CAAC,EAAEqB,IAAI,KAAKvB,MAAM,CAACuB;MACzD,CAAC,CAAC;MAEFJ,MAAM,CAACZ,IAAI,GAAI,kDAAiDQ,KAAK,CAACS,OAAQ,EAAC;MAC/EP,YAAY,CAACQ,IAAI,CAACN,MAAM,CAAC;IAC7B,CAAC,CAAC;IAEFvB,OAAO,CAAC8B,OAAO,CAACC,QAAQ,CAAC,CAACvB,aAAa,EAAE,GAAGa,YAAY,CAAC,CAAC;EAC9D,CAAC,CAAC;AACN,CAAC;AAACW,OAAA,CAAAlC,oBAAA,GAAAA,oBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_api","require","_apiHeadlessCms","_constants","createDefaultGraphQL","ContextPlugin","context","tenant","tenancy","getCurrentTenant","locale","i18n","getContentLocale","isHeadlessCmsReady","defaultPlugin","CmsGraphQLSchemaPlugin","typeDefs","name","models","security","withoutAuthorization","allModels","cms","listModels","filter","model","isPrivate","tags","Array","isArray","includes","CMS_MODEL_SINGLETON_TAG","modelPlugins","forEach","plugin","singularApiName","isApplicable","id","code","modelId","push","plugins","register","exports"],"sources":["createDefaultGraphQL.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { HcmsBulkActionsContext } from \"~/types\";\nimport { CmsGraphQLSchemaPlugin, isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"@webiny/api-headless-cms/constants\";\n\nexport const createDefaultGraphQL = () => {\n return new ContextPlugin<HcmsBulkActionsContext>(async context => {\n const tenant = context.tenancy.getCurrentTenant();\n const locale = context.i18n.getContentLocale();\n\n if (!locale || !(await isHeadlessCmsReady(context))) {\n return;\n }\n\n const defaultPlugin = new CmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type BulkActionResponseData {\n id: String\n }\n\n type BulkActionResponse {\n data: BulkActionResponseData\n error: CmsError\n }\n `\n });\n defaultPlugin.name = `headless-cms.graphql.schema.bulkAction.default`;\n\n const models = await context.security.withoutAuthorization(async () => {\n const allModels = await context.cms.listModels();\n return allModels.filter(model => {\n if (model.isPrivate) {\n return false;\n }\n const tags = Array.isArray(model.tags) ? model.tags : [];\n if (tags.includes(CMS_MODEL_SINGLETON_TAG)) {\n return false;\n }\n return true;\n });\n });\n\n const modelPlugins: CmsGraphQLSchemaPlugin<HcmsBulkActionsContext>[] = [];\n\n models.forEach(model => {\n const plugin = new CmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n enum BulkAction${model.singularApiName}Name {\n _empty\n }\n \n extend type Mutation {\n bulkAction${model.singularApiName}(\n action: BulkAction${model.singularApiName}Name!\n where: ${model.singularApiName}ListWhereInput\n search: String\n data: JSON\n ): BulkActionResponse\n }\n `,\n isApplicable: context =>\n context.tenancy.getCurrentTenant().id === tenant.id &&\n context.i18n.getContentLocale()?.code === locale.code\n });\n\n plugin.name = `headless-cms.graphql.schema.bulkAction.default.${model.modelId}`;\n modelPlugins.push(plugin);\n });\n\n context.plugins.register([defaultPlugin, ...modelPlugins]);\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEO,MAAMG,oBAAoB,GAAGA,CAAA,KAAM;EACtC,OAAO,IAAIC,kBAAa,CAAyB,MAAMC,OAAO,IAAI;IAC9D,MAAMC,MAAM,GAAGD,OAAO,CAACE,OAAO,CAACC,gBAAgB,CAAC,CAAC;IACjD,MAAMC,MAAM,GAAGJ,OAAO,CAACK,IAAI,CAACC,gBAAgB,CAAC,CAAC;IAE9C,IAAI,CAACF,MAAM,IAAI,EAAE,MAAM,IAAAG,kCAAkB,EAACP,OAAO,CAAC,CAAC,EAAE;MACjD;IACJ;IAEA,MAAMQ,aAAa,GAAG,IAAIC,sCAAsB,CAAC;MAC7CC,QAAQ,EAAE,aAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,CAAC,CAAC;IACFF,aAAa,CAACG,IAAI,GAAG,gDAAgD;IAErE,MAAMC,MAAM,GAAG,MAAMZ,OAAO,CAACa,QAAQ,CAACC,oBAAoB,CAAC,YAAY;MACnE,MAAMC,SAAS,GAAG,MAAMf,OAAO,CAACgB,GAAG,CAACC,UAAU,CAAC,CAAC;MAChD,OAAOF,SAAS,CAACG,MAAM,CAACC,KAAK,IAAI;QAC7B,IAAIA,KAAK,CAACC,SAAS,EAAE;UACjB,OAAO,KAAK;QAChB;QACA,MAAMC,IAAI,GAAGC,KAAK,CAACC,OAAO,CAACJ,KAAK,CAACE,IAAI,CAAC,GAAGF,KAAK,CAACE,IAAI,GAAG,EAAE;QACxD,IAAIA,IAAI,CAACG,QAAQ,CAACC,kCAAuB,CAAC,EAAE;UACxC,OAAO,KAAK;QAChB;QACA,OAAO,IAAI;MACf,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,MAAMC,YAA8D,GAAG,EAAE;IAEzEd,MAAM,CAACe,OAAO,CAACR,KAAK,IAAI;MACpB,MAAMS,MAAM,GAAG,IAAInB,sCAAsB,CAAC;QACtCC,QAAQ,EAAE,aAAc;AACxC,qCAAqCS,KAAK,CAACU,eAAe;AAC1D;AACA;AACA;AACA;AACA,oCAAoCV,KAAK,CAACU,eAAe;AACzD,gDAAgDV,KAAK,CAACU,eAAe;AACrE,qCAAqCV,KAAK,CAACU,eAAe;AAC1D;AACA;AACA;AACA;AACA,iBAAiB;QACDC,YAAY,EAAE9B,OAAO,IACjBA,OAAO,CAACE,OAAO,CAACC,gBAAgB,CAAC,CAAC,CAAC4B,EAAE,KAAK9B,MAAM,CAAC8B,EAAE,IACnD/B,OAAO,CAACK,IAAI,CAACC,gBAAgB,CAAC,CAAC,EAAE0B,IAAI,KAAK5B,MAAM,CAAC4B;MACzD,CAAC,CAAC;MAEFJ,MAAM,CAACjB,IAAI,GAAG,kDAAkDQ,KAAK,CAACc,OAAO,EAAE;MAC/EP,YAAY,CAACQ,IAAI,CAACN,MAAM,CAAC;IAC7B,CAAC,CAAC;IAEF5B,OAAO,CAACmC,OAAO,CAACC,QAAQ,CAAC,CAAC5B,aAAa,EAAE,GAAGkB,YAAY,CAAC,CAAC;EAC9D,CAAC,CAAC;AACN,CAAC;AAACW,OAAA,CAAAvC,oBAAA,GAAAA,oBAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["ListDeletedEntries","constructor","context","execute","modelId","params","model","cms","getModel","Error","entries","meta","listDeletedEntries","createListDeletedEntries","exports"],"sources":["ListDeletedEntries.ts"],"sourcesContent":["import { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport { IListEntries } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nclass ListDeletedEntries implements IListEntries {\n private readonly context: HcmsBulkActionsContext;\n\n constructor(context: HcmsBulkActionsContext) {\n this.context = context;\n }\n\n async execute(modelId: string, params: CmsEntryListParams) {\n const model = await this.context.cms.getModel(modelId);\n\n if (!model) {\n throw new Error(`Model with ${modelId} not found!`);\n }\n\n const [entries, meta] = await this.context.cms.listDeletedEntries(model, params);\n\n return {\n entries,\n meta\n };\n }\n}\n\nexport const createListDeletedEntries = (context: HcmsBulkActionsContext) => {\n return new ListDeletedEntries(context);\n};\n"],"mappings":";;;;;;AAIA,MAAMA,kBAAkB,CAAyB;EAG7CC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,OAAe,EAAEC,MAA0B,EAAE;IACvD,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACJ,OAAO,CAACK,GAAG,CAACC,QAAQ,CAACJ,OAAO,CAAC;IAEtD,IAAI,CAACE,KAAK,EAAE;MACR,MAAM,IAAIG,KAAK,CAAE,cAAaL,OAAQ,aAAY,CAAC;IACvD;IAEA,MAAM,CAACM,OAAO,EAAEC,IAAI,CAAC,GAAG,MAAM,IAAI,CAACT,OAAO,CAACK,GAAG,CAACK,kBAAkB,CAACN,KAAK,EAAED,MAAM,CAAC;IAEhF,OAAO;MACHK,OAAO;MACPC;IACJ,CAAC;EACL;AACJ;AAEO,MAAME,wBAAwB,GAAIX,OAA+B,IAAK;EACzE,OAAO,IAAIF,kBAAkB,CAACE,OAAO,CAAC;AAC1C,CAAC;AAACY,OAAA,CAAAD,wBAAA,GAAAA,wBAAA","ignoreList":[]}
1
+ {"version":3,"names":["ListDeletedEntries","constructor","context","execute","modelId","params","model","cms","getModel","Error","entries","meta","listDeletedEntries","createListDeletedEntries","exports"],"sources":["ListDeletedEntries.ts"],"sourcesContent":["import { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport { IListEntries } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nclass ListDeletedEntries implements IListEntries {\n private readonly context: HcmsBulkActionsContext;\n\n constructor(context: HcmsBulkActionsContext) {\n this.context = context;\n }\n\n async execute(modelId: string, params: CmsEntryListParams) {\n const model = await this.context.cms.getModel(modelId);\n\n if (!model) {\n throw new Error(`Model with ${modelId} not found!`);\n }\n\n const [entries, meta] = await this.context.cms.listDeletedEntries(model, params);\n\n return {\n entries,\n meta\n };\n }\n}\n\nexport const createListDeletedEntries = (context: HcmsBulkActionsContext) => {\n return new ListDeletedEntries(context);\n};\n"],"mappings":";;;;;;AAIA,MAAMA,kBAAkB,CAAyB;EAG7CC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,OAAe,EAAEC,MAA0B,EAAE;IACvD,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACJ,OAAO,CAACK,GAAG,CAACC,QAAQ,CAACJ,OAAO,CAAC;IAEtD,IAAI,CAACE,KAAK,EAAE;MACR,MAAM,IAAIG,KAAK,CAAC,cAAcL,OAAO,aAAa,CAAC;IACvD;IAEA,MAAM,CAACM,OAAO,EAAEC,IAAI,CAAC,GAAG,MAAM,IAAI,CAACT,OAAO,CAACK,GAAG,CAACK,kBAAkB,CAACN,KAAK,EAAED,MAAM,CAAC;IAEhF,OAAO;MACHK,OAAO;MACPC;IACJ,CAAC;EACL;AACJ;AAEO,MAAME,wBAAwB,GAAIX,OAA+B,IAAK;EACzE,OAAO,IAAIF,kBAAkB,CAACE,OAAO,CAAC;AAC1C,CAAC;AAACY,OAAA,CAAAD,wBAAA,GAAAA,wBAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["ListLatestEntries","constructor","context","execute","modelId","params","model","cms","getModel","Error","entries","meta","listLatestEntries","createListLatestEntries","exports"],"sources":["ListLatestEntries.ts"],"sourcesContent":["import { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport { IListEntries } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nclass ListLatestEntries implements IListEntries {\n private readonly context: HcmsBulkActionsContext;\n\n constructor(context: HcmsBulkActionsContext) {\n this.context = context;\n }\n\n async execute(modelId: string, params: CmsEntryListParams) {\n const model = await this.context.cms.getModel(modelId);\n\n if (!model) {\n throw new Error(`Model with ${modelId} not found!`);\n }\n\n const [entries, meta] = await this.context.cms.listLatestEntries(model, params);\n\n return {\n entries,\n meta\n };\n }\n}\n\nexport const createListLatestEntries = (context: HcmsBulkActionsContext) => {\n return new ListLatestEntries(context);\n};\n"],"mappings":";;;;;;AAIA,MAAMA,iBAAiB,CAAyB;EAG5CC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,OAAe,EAAEC,MAA0B,EAAE;IACvD,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACJ,OAAO,CAACK,GAAG,CAACC,QAAQ,CAACJ,OAAO,CAAC;IAEtD,IAAI,CAACE,KAAK,EAAE;MACR,MAAM,IAAIG,KAAK,CAAE,cAAaL,OAAQ,aAAY,CAAC;IACvD;IAEA,MAAM,CAACM,OAAO,EAAEC,IAAI,CAAC,GAAG,MAAM,IAAI,CAACT,OAAO,CAACK,GAAG,CAACK,iBAAiB,CAACN,KAAK,EAAED,MAAM,CAAC;IAE/E,OAAO;MACHK,OAAO;MACPC;IACJ,CAAC;EACL;AACJ;AAEO,MAAME,uBAAuB,GAAIX,OAA+B,IAAK;EACxE,OAAO,IAAIF,iBAAiB,CAACE,OAAO,CAAC;AACzC,CAAC;AAACY,OAAA,CAAAD,uBAAA,GAAAA,uBAAA","ignoreList":[]}
1
+ {"version":3,"names":["ListLatestEntries","constructor","context","execute","modelId","params","model","cms","getModel","Error","entries","meta","listLatestEntries","createListLatestEntries","exports"],"sources":["ListLatestEntries.ts"],"sourcesContent":["import { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport { IListEntries } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nclass ListLatestEntries implements IListEntries {\n private readonly context: HcmsBulkActionsContext;\n\n constructor(context: HcmsBulkActionsContext) {\n this.context = context;\n }\n\n async execute(modelId: string, params: CmsEntryListParams) {\n const model = await this.context.cms.getModel(modelId);\n\n if (!model) {\n throw new Error(`Model with ${modelId} not found!`);\n }\n\n const [entries, meta] = await this.context.cms.listLatestEntries(model, params);\n\n return {\n entries,\n meta\n };\n }\n}\n\nexport const createListLatestEntries = (context: HcmsBulkActionsContext) => {\n return new ListLatestEntries(context);\n};\n"],"mappings":";;;;;;AAIA,MAAMA,iBAAiB,CAAyB;EAG5CC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,OAAe,EAAEC,MAA0B,EAAE;IACvD,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACJ,OAAO,CAACK,GAAG,CAACC,QAAQ,CAACJ,OAAO,CAAC;IAEtD,IAAI,CAACE,KAAK,EAAE;MACR,MAAM,IAAIG,KAAK,CAAC,cAAcL,OAAO,aAAa,CAAC;IACvD;IAEA,MAAM,CAACM,OAAO,EAAEC,IAAI,CAAC,GAAG,MAAM,IAAI,CAACT,OAAO,CAACK,GAAG,CAACK,iBAAiB,CAACN,KAAK,EAAED,MAAM,CAAC;IAE/E,OAAO;MACHK,OAAO;MACPC;IACJ,CAAC;EACL;AACJ;AAEO,MAAME,uBAAuB,GAAIX,OAA+B,IAAK;EACxE,OAAO,IAAIF,iBAAiB,CAACE,OAAO,CAAC;AACzC,CAAC;AAACY,OAAA,CAAAD,uBAAA,GAAAA,uBAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["ListNotPublishedEntries","constructor","context","execute","modelId","params","model","cms","getModel","Error","entries","meta","listLatestEntries","where","status_not","createListNotPublishedEntries","exports"],"sources":["ListNotPublishedEntries.ts"],"sourcesContent":["import { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport { IListEntries } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nclass ListNotPublishedEntries implements IListEntries {\n private readonly context: HcmsBulkActionsContext;\n\n constructor(context: HcmsBulkActionsContext) {\n this.context = context;\n }\n\n async execute(modelId: string, params: CmsEntryListParams) {\n const model = await this.context.cms.getModel(modelId);\n\n if (!model) {\n throw new Error(`Model with ${modelId} not found!`);\n }\n\n const [entries, meta] = await this.context.cms.listLatestEntries(model, {\n ...params,\n where: {\n ...params.where,\n status_not: \"published\"\n }\n });\n\n return {\n entries,\n meta\n };\n }\n}\n\nexport const createListNotPublishedEntries = (context: HcmsBulkActionsContext) => {\n return new ListNotPublishedEntries(context);\n};\n"],"mappings":";;;;;;AAIA,MAAMA,uBAAuB,CAAyB;EAGlDC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,OAAe,EAAEC,MAA0B,EAAE;IACvD,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACJ,OAAO,CAACK,GAAG,CAACC,QAAQ,CAACJ,OAAO,CAAC;IAEtD,IAAI,CAACE,KAAK,EAAE;MACR,MAAM,IAAIG,KAAK,CAAE,cAAaL,OAAQ,aAAY,CAAC;IACvD;IAEA,MAAM,CAACM,OAAO,EAAEC,IAAI,CAAC,GAAG,MAAM,IAAI,CAACT,OAAO,CAACK,GAAG,CAACK,iBAAiB,CAACN,KAAK,EAAE;MACpE,GAAGD,MAAM;MACTQ,KAAK,EAAE;QACH,GAAGR,MAAM,CAACQ,KAAK;QACfC,UAAU,EAAE;MAChB;IACJ,CAAC,CAAC;IAEF,OAAO;MACHJ,OAAO;MACPC;IACJ,CAAC;EACL;AACJ;AAEO,MAAMI,6BAA6B,GAAIb,OAA+B,IAAK;EAC9E,OAAO,IAAIF,uBAAuB,CAACE,OAAO,CAAC;AAC/C,CAAC;AAACc,OAAA,CAAAD,6BAAA,GAAAA,6BAAA","ignoreList":[]}
1
+ {"version":3,"names":["ListNotPublishedEntries","constructor","context","execute","modelId","params","model","cms","getModel","Error","entries","meta","listLatestEntries","where","status_not","createListNotPublishedEntries","exports"],"sources":["ListNotPublishedEntries.ts"],"sourcesContent":["import { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport { IListEntries } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nclass ListNotPublishedEntries implements IListEntries {\n private readonly context: HcmsBulkActionsContext;\n\n constructor(context: HcmsBulkActionsContext) {\n this.context = context;\n }\n\n async execute(modelId: string, params: CmsEntryListParams) {\n const model = await this.context.cms.getModel(modelId);\n\n if (!model) {\n throw new Error(`Model with ${modelId} not found!`);\n }\n\n const [entries, meta] = await this.context.cms.listLatestEntries(model, {\n ...params,\n where: {\n ...params.where,\n status_not: \"published\"\n }\n });\n\n return {\n entries,\n meta\n };\n }\n}\n\nexport const createListNotPublishedEntries = (context: HcmsBulkActionsContext) => {\n return new ListNotPublishedEntries(context);\n};\n"],"mappings":";;;;;;AAIA,MAAMA,uBAAuB,CAAyB;EAGlDC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,OAAe,EAAEC,MAA0B,EAAE;IACvD,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACJ,OAAO,CAACK,GAAG,CAACC,QAAQ,CAACJ,OAAO,CAAC;IAEtD,IAAI,CAACE,KAAK,EAAE;MACR,MAAM,IAAIG,KAAK,CAAC,cAAcL,OAAO,aAAa,CAAC;IACvD;IAEA,MAAM,CAACM,OAAO,EAAEC,IAAI,CAAC,GAAG,MAAM,IAAI,CAACT,OAAO,CAACK,GAAG,CAACK,iBAAiB,CAACN,KAAK,EAAE;MACpE,GAAGD,MAAM;MACTQ,KAAK,EAAE;QACH,GAAGR,MAAM,CAACQ,KAAK;QACfC,UAAU,EAAE;MAChB;IACJ,CAAC,CAAC;IAEF,OAAO;MACHJ,OAAO;MACPC;IACJ,CAAC;EACL;AACJ;AAEO,MAAMI,6BAA6B,GAAIb,OAA+B,IAAK;EAC9E,OAAO,IAAIF,uBAAuB,CAACE,OAAO,CAAC;AAC/C,CAAC;AAACc,OAAA,CAAAD,6BAAA,GAAAA,6BAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["ListPublishedEntries","constructor","context","execute","modelId","params","model","cms","getModel","Error","entries","meta","listPublishedEntries","createListPublishedEntries","exports"],"sources":["ListPublishedEntries.ts"],"sourcesContent":["import { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport { IListEntries } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nclass ListPublishedEntries implements IListEntries {\n private readonly context: HcmsBulkActionsContext;\n\n constructor(context: HcmsBulkActionsContext) {\n this.context = context;\n }\n\n async execute(modelId: string, params: CmsEntryListParams) {\n const model = await this.context.cms.getModel(modelId);\n\n if (!model) {\n throw new Error(`Model with ${modelId} not found!`);\n }\n\n const [entries, meta] = await this.context.cms.listPublishedEntries(model, params);\n\n return {\n entries,\n meta\n };\n }\n}\n\nexport const createListPublishedEntries = (context: HcmsBulkActionsContext) => {\n return new ListPublishedEntries(context);\n};\n"],"mappings":";;;;;;AAIA,MAAMA,oBAAoB,CAAyB;EAG/CC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,OAAe,EAAEC,MAA0B,EAAE;IACvD,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACJ,OAAO,CAACK,GAAG,CAACC,QAAQ,CAACJ,OAAO,CAAC;IAEtD,IAAI,CAACE,KAAK,EAAE;MACR,MAAM,IAAIG,KAAK,CAAE,cAAaL,OAAQ,aAAY,CAAC;IACvD;IAEA,MAAM,CAACM,OAAO,EAAEC,IAAI,CAAC,GAAG,MAAM,IAAI,CAACT,OAAO,CAACK,GAAG,CAACK,oBAAoB,CAACN,KAAK,EAAED,MAAM,CAAC;IAElF,OAAO;MACHK,OAAO;MACPC;IACJ,CAAC;EACL;AACJ;AAEO,MAAME,0BAA0B,GAAIX,OAA+B,IAAK;EAC3E,OAAO,IAAIF,oBAAoB,CAACE,OAAO,CAAC;AAC5C,CAAC;AAACY,OAAA,CAAAD,0BAAA,GAAAA,0BAAA","ignoreList":[]}
1
+ {"version":3,"names":["ListPublishedEntries","constructor","context","execute","modelId","params","model","cms","getModel","Error","entries","meta","listPublishedEntries","createListPublishedEntries","exports"],"sources":["ListPublishedEntries.ts"],"sourcesContent":["import { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport { IListEntries } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nclass ListPublishedEntries implements IListEntries {\n private readonly context: HcmsBulkActionsContext;\n\n constructor(context: HcmsBulkActionsContext) {\n this.context = context;\n }\n\n async execute(modelId: string, params: CmsEntryListParams) {\n const model = await this.context.cms.getModel(modelId);\n\n if (!model) {\n throw new Error(`Model with ${modelId} not found!`);\n }\n\n const [entries, meta] = await this.context.cms.listPublishedEntries(model, params);\n\n return {\n entries,\n meta\n };\n }\n}\n\nexport const createListPublishedEntries = (context: HcmsBulkActionsContext) => {\n return new ListPublishedEntries(context);\n};\n"],"mappings":";;;;;;AAIA,MAAMA,oBAAoB,CAAyB;EAG/CC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,OAAe,EAAEC,MAA0B,EAAE;IACvD,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACJ,OAAO,CAACK,GAAG,CAACC,QAAQ,CAACJ,OAAO,CAAC;IAEtD,IAAI,CAACE,KAAK,EAAE;MACR,MAAM,IAAIG,KAAK,CAAC,cAAcL,OAAO,aAAa,CAAC;IACvD;IAEA,MAAM,CAACM,OAAO,EAAEC,IAAI,CAAC,GAAG,MAAM,IAAI,CAACT,OAAO,CAACK,GAAG,CAACK,oBAAoB,CAACN,KAAK,EAAED,MAAM,CAAC;IAElF,OAAO;MACHK,OAAO;MACPC;IACJ,CAAC;EACL;AACJ;AAEO,MAAME,0BAA0B,GAAIX,OAA+B,IAAK;EAC3E,OAAO,IAAIF,oBAAoB,CAACE,OAAO,CAAC;AAC5C,CAAC;AAACY,OAAA,CAAAD,0BAAA,GAAAA,0BAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["MoveEntryToFolder","constructor","context","execute","model","id","data","folderId","Error","cms","moveEntry","createMoveEntryToFolder","exports"],"sources":["MoveEntryToFolder.ts"],"sourcesContent":["import { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { IProcessEntry } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\ninterface MoveEntryToFolderData {\n folderId?: string;\n}\n\nclass MoveEntryToFolder implements IProcessEntry {\n private readonly context: HcmsBulkActionsContext;\n\n constructor(context: HcmsBulkActionsContext) {\n this.context = context;\n }\n\n async execute(model: CmsModel, id: string, data?: MoveEntryToFolderData): Promise<void> {\n if (!data?.folderId) {\n throw new Error(`Missing \"data.folderId\" in the input.`);\n }\n await this.context.cms.moveEntry(model, id, data.folderId);\n }\n}\n\nexport const createMoveEntryToFolder = (context: HcmsBulkActionsContext) => {\n return new MoveEntryToFolder(context);\n};\n"],"mappings":";;;;;;AAQA,MAAMA,iBAAiB,CAA0B;EAG7CC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,KAAe,EAAEC,EAAU,EAAEC,IAA4B,EAAiB;IACpF,IAAI,CAACA,IAAI,EAAEC,QAAQ,EAAE;MACjB,MAAM,IAAIC,KAAK,CAAE,uCAAsC,CAAC;IAC5D;IACA,MAAM,IAAI,CAACN,OAAO,CAACO,GAAG,CAACC,SAAS,CAACN,KAAK,EAAEC,EAAE,EAAEC,IAAI,CAACC,QAAQ,CAAC;EAC9D;AACJ;AAEO,MAAMI,uBAAuB,GAAIT,OAA+B,IAAK;EACxE,OAAO,IAAIF,iBAAiB,CAACE,OAAO,CAAC;AACzC,CAAC;AAACU,OAAA,CAAAD,uBAAA,GAAAA,uBAAA","ignoreList":[]}
1
+ {"version":3,"names":["MoveEntryToFolder","constructor","context","execute","model","id","data","folderId","Error","cms","moveEntry","createMoveEntryToFolder","exports"],"sources":["MoveEntryToFolder.ts"],"sourcesContent":["import { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { IProcessEntry } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\ninterface MoveEntryToFolderData {\n folderId?: string;\n}\n\nclass MoveEntryToFolder implements IProcessEntry {\n private readonly context: HcmsBulkActionsContext;\n\n constructor(context: HcmsBulkActionsContext) {\n this.context = context;\n }\n\n async execute(model: CmsModel, id: string, data?: MoveEntryToFolderData): Promise<void> {\n if (!data?.folderId) {\n throw new Error(`Missing \"data.folderId\" in the input.`);\n }\n await this.context.cms.moveEntry(model, id, data.folderId);\n }\n}\n\nexport const createMoveEntryToFolder = (context: HcmsBulkActionsContext) => {\n return new MoveEntryToFolder(context);\n};\n"],"mappings":";;;;;;AAQA,MAAMA,iBAAiB,CAA0B;EAG7CC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,KAAe,EAAEC,EAAU,EAAEC,IAA4B,EAAiB;IACpF,IAAI,CAACA,IAAI,EAAEC,QAAQ,EAAE;MACjB,MAAM,IAAIC,KAAK,CAAC,uCAAuC,CAAC;IAC5D;IACA,MAAM,IAAI,CAACN,OAAO,CAACO,GAAG,CAACC,SAAS,CAACN,KAAK,EAAEC,EAAE,EAAEC,IAAI,CAACC,QAAQ,CAAC;EAC9D;AACJ;AAEO,MAAMI,uBAAuB,GAAIT,OAA+B,IAAK;EACxE,OAAO,IAAIF,iBAAiB,CAACE,OAAO,CAAC;AACzC,CAAC;AAACU,OAAA,CAAAD,uBAAA,GAAAA,uBAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_TaskCache","require","_types","MAX_TASK_LIST_LENGTH","CreateTasksByModel","constructor","taskDefinition","listEntriesGateway","batchSize","taskCache","TaskCache","execute","params","response","input","isAborted","isCloseToTimeout","context","store","listEntriesParams","where","search","after","limit","aborted","triggerTask","getTask","continue","action","BulkActionOperationByModelAction","PROCESS_SUBTASKS","entries","meta","modelId","totalCount","END_TASK","getTasksLength","length","ids","i","push","id","cacheTask","identity","data","hasMoreItems","cursor","ex","error","message","exports"],"sources":["CreateTasksByModel.ts"],"sourcesContent":["import { ITaskResponseResult } from \"@webiny/tasks\";\nimport { TaskCache } from \"./TaskCache\";\nimport { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport { IListEntries } from \"~/abstractions\";\nimport { BulkActionOperationByModelAction, IBulkActionOperationByModelTaskParams } from \"~/types\";\n\nconst MAX_TASK_LIST_LENGTH = 10;\n\n/**\n * The `CreateTasksByModel` class handles the execution of a task to process entries in batches.\n */\nexport class CreateTasksByModel {\n private readonly taskCache: TaskCache;\n private listEntriesGateway: IListEntries;\n private readonly batchSize: number;\n\n constructor(taskDefinition: string, listEntriesGateway: IListEntries, batchSize: number) {\n this.taskCache = new TaskCache(taskDefinition);\n this.listEntriesGateway = listEntriesGateway;\n this.batchSize = batchSize;\n }\n\n async execute(params: IBulkActionOperationByModelTaskParams): Promise<ITaskResponseResult> {\n const { response, input, isAborted, isCloseToTimeout, context, store } = params;\n\n try {\n const listEntriesParams: CmsEntryListParams = {\n where: input.where,\n search: input.search,\n after: input.after,\n limit: this.batchSize\n };\n\n while (true) {\n if (isAborted()) {\n return response.aborted();\n } else if (isCloseToTimeout()) {\n await this.taskCache.triggerTask(context, store.getTask());\n return response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n // List entries from the HCMS based on the provided query\n const { entries, meta } = await this.listEntriesGateway.execute(\n input.modelId,\n listEntriesParams\n );\n\n // End the task if no entries match the query\n if (meta.totalCount === 0) {\n return response.continue({\n ...input,\n action: BulkActionOperationByModelAction.END_TASK\n });\n }\n\n // Continue processing if we are reached the task list length limit\n if (this.taskCache.getTasksLength() === MAX_TASK_LIST_LENGTH) {\n await this.taskCache.triggerTask(context, store.getTask());\n return response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n // Continue processing if no entries are returned in the current batch\n if (entries.length === 0) {\n await this.taskCache.triggerTask(context, store.getTask());\n return response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n // Extract entry IDs\n const ids: string[] = [];\n for (let i = 0; i < entries.length; i++) {\n ids.push(entries[i].id);\n }\n\n if (ids.length > 0) {\n // Cache the task with the entry IDs\n this.taskCache.cacheTask({\n modelId: input.modelId,\n identity: input.identity,\n data: input.data,\n ids\n });\n }\n\n // Continue processing if there are no more entries or pagination is complete\n if (!meta.hasMoreItems || !meta.cursor) {\n await this.taskCache.triggerTask(context, store.getTask());\n\n return response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n listEntriesParams.after = meta.cursor;\n }\n } catch (ex) {\n return response.error(ex.message ?? `Error while creating task.`);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_TaskCache","require","_types","MAX_TASK_LIST_LENGTH","CreateTasksByModel","constructor","taskDefinition","listEntriesGateway","batchSize","taskCache","TaskCache","execute","params","response","input","isAborted","isCloseToTimeout","context","store","listEntriesParams","where","search","after","limit","aborted","triggerTask","getTask","continue","action","BulkActionOperationByModelAction","PROCESS_SUBTASKS","entries","meta","modelId","totalCount","END_TASK","getTasksLength","length","ids","i","push","id","cacheTask","identity","data","hasMoreItems","cursor","ex","error","message","exports"],"sources":["CreateTasksByModel.ts"],"sourcesContent":["import { ITaskResponseResult } from \"@webiny/tasks\";\nimport { TaskCache } from \"./TaskCache\";\nimport { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport { IListEntries } from \"~/abstractions\";\nimport { BulkActionOperationByModelAction, IBulkActionOperationByModelTaskParams } from \"~/types\";\n\nconst MAX_TASK_LIST_LENGTH = 10;\n\n/**\n * The `CreateTasksByModel` class handles the execution of a task to process entries in batches.\n */\nexport class CreateTasksByModel {\n private readonly taskCache: TaskCache;\n private listEntriesGateway: IListEntries;\n private readonly batchSize: number;\n\n constructor(taskDefinition: string, listEntriesGateway: IListEntries, batchSize: number) {\n this.taskCache = new TaskCache(taskDefinition);\n this.listEntriesGateway = listEntriesGateway;\n this.batchSize = batchSize;\n }\n\n async execute(params: IBulkActionOperationByModelTaskParams): Promise<ITaskResponseResult> {\n const { response, input, isAborted, isCloseToTimeout, context, store } = params;\n\n try {\n const listEntriesParams: CmsEntryListParams = {\n where: input.where,\n search: input.search,\n after: input.after,\n limit: this.batchSize\n };\n\n while (true) {\n if (isAborted()) {\n return response.aborted();\n } else if (isCloseToTimeout()) {\n await this.taskCache.triggerTask(context, store.getTask());\n return response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n // List entries from the HCMS based on the provided query\n const { entries, meta } = await this.listEntriesGateway.execute(\n input.modelId,\n listEntriesParams\n );\n\n // End the task if no entries match the query\n if (meta.totalCount === 0) {\n return response.continue({\n ...input,\n action: BulkActionOperationByModelAction.END_TASK\n });\n }\n\n // Continue processing if we are reached the task list length limit\n if (this.taskCache.getTasksLength() === MAX_TASK_LIST_LENGTH) {\n await this.taskCache.triggerTask(context, store.getTask());\n return response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n // Continue processing if no entries are returned in the current batch\n if (entries.length === 0) {\n await this.taskCache.triggerTask(context, store.getTask());\n return response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n // Extract entry IDs\n const ids: string[] = [];\n for (let i = 0; i < entries.length; i++) {\n ids.push(entries[i].id);\n }\n\n if (ids.length > 0) {\n // Cache the task with the entry IDs\n this.taskCache.cacheTask({\n modelId: input.modelId,\n identity: input.identity,\n data: input.data,\n ids\n });\n }\n\n // Continue processing if there are no more entries or pagination is complete\n if (!meta.hasMoreItems || !meta.cursor) {\n await this.taskCache.triggerTask(context, store.getTask());\n\n return response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n listEntriesParams.after = meta.cursor;\n }\n } catch (ex) {\n return response.error(ex.message ?? `Error while creating task.`);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["TaskCache","taskCache","constructor","taskDefinition","cacheTask","item","push","triggerTask","context","parent","tasks","getTasks","length","task","trigger","definition","input","error","console","clearTasks","getTasksLength","exports"],"sources":["TaskCache.ts"],"sourcesContent":["import { HcmsBulkActionsContext } from \"~/types\";\nimport { ITask, ITaskDataInput } from \"@webiny/tasks\";\n\n/**\n * TaskCache class for managing and triggering cached tasks.\n * @template TTask - Task input data.\n */\nexport class TaskCache<TTask = ITaskDataInput> {\n private readonly taskDefinition: string;\n private taskCache: TTask[] = [];\n\n constructor(taskDefinition: string) {\n this.taskDefinition = taskDefinition;\n }\n\n /**\n * Adds a task to the cache.\n * @param {TTask} item - The task input data to be cached.\n */\n cacheTask(item: TTask) {\n this.taskCache.push(item);\n }\n\n /**\n * Triggers all cached tasks using the provided context and parent task.\n * @param {HcmsBulkActionsContext} context - The context used to trigger the tasks.\n * @param {ITask} parent - The parent task to associate with the triggered tasks.\n */\n async triggerTask(context: HcmsBulkActionsContext, parent: ITask) {\n const tasks = this.getTasks();\n\n if (tasks.length === 0) {\n return;\n }\n\n for (const task of tasks) {\n try {\n await context.tasks.trigger<TTask>({\n definition: this.taskDefinition,\n parent,\n input: task\n });\n } catch (error) {\n console.error(`Error triggering task.`, error);\n }\n }\n\n // Clear the cache after processing\n this.clearTasks();\n }\n\n /**\n * Retrieves the cached tasks length.\n * @returns number\n */\n getTasksLength() {\n return this.getTasks().length;\n }\n\n /**\n * Retrieves the cached tasks.\n * @returns {TTask[]} The list of cached tasks.\n */\n private getTasks() {\n return this.taskCache;\n }\n\n /**\n * Clears all cached tasks.\n */\n private clearTasks() {\n this.taskCache = [];\n }\n}\n"],"mappings":";;;;;;AAGA;AACA;AACA;AACA;AACO,MAAMA,SAAS,CAAyB;EAEnCC,SAAS,GAAY,EAAE;EAE/BC,WAAWA,CAACC,cAAsB,EAAE;IAChC,IAAI,CAACA,cAAc,GAAGA,cAAc;EACxC;;EAEA;AACJ;AACA;AACA;EACIC,SAASA,CAACC,IAAW,EAAE;IACnB,IAAI,CAACJ,SAAS,CAACK,IAAI,CAACD,IAAI,CAAC;EAC7B;;EAEA;AACJ;AACA;AACA;AACA;EACI,MAAME,WAAWA,CAACC,OAA+B,EAAEC,MAAa,EAAE;IAC9D,MAAMC,KAAK,GAAG,IAAI,CAACC,QAAQ,CAAC,CAAC;IAE7B,IAAID,KAAK,CAACE,MAAM,KAAK,CAAC,EAAE;MACpB;IACJ;IAEA,KAAK,MAAMC,IAAI,IAAIH,KAAK,EAAE;MACtB,IAAI;QACA,MAAMF,OAAO,CAACE,KAAK,CAACI,OAAO,CAAQ;UAC/BC,UAAU,EAAE,IAAI,CAACZ,cAAc;UAC/BM,MAAM;UACNO,KAAK,EAAEH;QACX,CAAC,CAAC;MACN,CAAC,CAAC,OAAOI,KAAK,EAAE;QACZC,OAAO,CAACD,KAAK,CAAE,wBAAuB,EAAEA,KAAK,CAAC;MAClD;IACJ;;IAEA;IACA,IAAI,CAACE,UAAU,CAAC,CAAC;EACrB;;EAEA;AACJ;AACA;AACA;EACIC,cAAcA,CAAA,EAAG;IACb,OAAO,IAAI,CAACT,QAAQ,CAAC,CAAC,CAACC,MAAM;EACjC;;EAEA;AACJ;AACA;AACA;EACYD,QAAQA,CAAA,EAAG;IACf,OAAO,IAAI,CAACV,SAAS;EACzB;;EAEA;AACJ;AACA;EACYkB,UAAUA,CAAA,EAAG;IACjB,IAAI,CAAClB,SAAS,GAAG,EAAE;EACvB;AACJ;AAACoB,OAAA,CAAArB,SAAA,GAAAA,SAAA","ignoreList":[]}
1
+ {"version":3,"names":["TaskCache","taskCache","constructor","taskDefinition","cacheTask","item","push","triggerTask","context","parent","tasks","getTasks","length","task","trigger","definition","input","error","console","clearTasks","getTasksLength","exports"],"sources":["TaskCache.ts"],"sourcesContent":["import { HcmsBulkActionsContext } from \"~/types\";\nimport { ITask, ITaskDataInput } from \"@webiny/tasks\";\n\n/**\n * TaskCache class for managing and triggering cached tasks.\n * @template TTask - Task input data.\n */\nexport class TaskCache<TTask = ITaskDataInput> {\n private readonly taskDefinition: string;\n private taskCache: TTask[] = [];\n\n constructor(taskDefinition: string) {\n this.taskDefinition = taskDefinition;\n }\n\n /**\n * Adds a task to the cache.\n * @param {TTask} item - The task input data to be cached.\n */\n cacheTask(item: TTask) {\n this.taskCache.push(item);\n }\n\n /**\n * Triggers all cached tasks using the provided context and parent task.\n * @param {HcmsBulkActionsContext} context - The context used to trigger the tasks.\n * @param {ITask} parent - The parent task to associate with the triggered tasks.\n */\n async triggerTask(context: HcmsBulkActionsContext, parent: ITask) {\n const tasks = this.getTasks();\n\n if (tasks.length === 0) {\n return;\n }\n\n for (const task of tasks) {\n try {\n await context.tasks.trigger<TTask>({\n definition: this.taskDefinition,\n parent,\n input: task\n });\n } catch (error) {\n console.error(`Error triggering task.`, error);\n }\n }\n\n // Clear the cache after processing\n this.clearTasks();\n }\n\n /**\n * Retrieves the cached tasks length.\n * @returns number\n */\n getTasksLength() {\n return this.getTasks().length;\n }\n\n /**\n * Retrieves the cached tasks.\n * @returns {TTask[]} The list of cached tasks.\n */\n private getTasks() {\n return this.taskCache;\n }\n\n /**\n * Clears all cached tasks.\n */\n private clearTasks() {\n this.taskCache = [];\n }\n}\n"],"mappings":";;;;;;AAGA;AACA;AACA;AACA;AACO,MAAMA,SAAS,CAAyB;EAEnCC,SAAS,GAAY,EAAE;EAE/BC,WAAWA,CAACC,cAAsB,EAAE;IAChC,IAAI,CAACA,cAAc,GAAGA,cAAc;EACxC;;EAEA;AACJ;AACA;AACA;EACIC,SAASA,CAACC,IAAW,EAAE;IACnB,IAAI,CAACJ,SAAS,CAACK,IAAI,CAACD,IAAI,CAAC;EAC7B;;EAEA;AACJ;AACA;AACA;AACA;EACI,MAAME,WAAWA,CAACC,OAA+B,EAAEC,MAAa,EAAE;IAC9D,MAAMC,KAAK,GAAG,IAAI,CAACC,QAAQ,CAAC,CAAC;IAE7B,IAAID,KAAK,CAACE,MAAM,KAAK,CAAC,EAAE;MACpB;IACJ;IAEA,KAAK,MAAMC,IAAI,IAAIH,KAAK,EAAE;MACtB,IAAI;QACA,MAAMF,OAAO,CAACE,KAAK,CAACI,OAAO,CAAQ;UAC/BC,UAAU,EAAE,IAAI,CAACZ,cAAc;UAC/BM,MAAM;UACNO,KAAK,EAAEH;QACX,CAAC,CAAC;MACN,CAAC,CAAC,OAAOI,KAAK,EAAE;QACZC,OAAO,CAACD,KAAK,CAAC,wBAAwB,EAAEA,KAAK,CAAC;MAClD;IACJ;;IAEA;IACA,IAAI,CAACE,UAAU,CAAC,CAAC;EACrB;;EAEA;AACJ;AACA;AACA;EACIC,cAAcA,CAAA,EAAG;IACb,OAAO,IAAI,CAACT,QAAQ,CAAC,CAAC,CAACC,MAAM;EACjC;;EAEA;AACJ;AACA;AACA;EACYD,QAAQA,CAAA,EAAG;IACf,OAAO,IAAI,CAACV,SAAS;EACzB;;EAEA;AACJ;AACA;EACYkB,UAAUA,CAAA,EAAG;IACjB,IAAI,CAAClB,SAAS,GAAG,EAAE;EACvB;AACJ;AAACoB,OAAA,CAAArB,SAAA,GAAAA,SAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_Result","require","ProcessTask","constructor","gateway","result","Result","execute","params","input","response","isAborted","isCloseToTimeout","context","aborted","continue","modelId","error","model","cms","getModel","ids","length","done","security","setIdentity","identity","id","data","addDone","ex","console","message","addFailed","name","getDone","failed","getFailed","exports"],"sources":["ProcessTask.ts"],"sourcesContent":["import { Result } from \"./Result\";\nimport { IBulkActionOperationTaskParams } from \"~/types\";\nimport { IProcessEntry } from \"~/abstractions\";\n\n/**\n * The `ProcessTask` class is responsible for processing a batch of entries\n * based on the provided parameters. It uses a gateway to perform the actual\n * processing and maintains the results of the operations, including successfully\n * processed and failed entries.\n */\nexport class ProcessTask {\n private readonly result: Result;\n private gateway: IProcessEntry;\n\n constructor(gateway: IProcessEntry) {\n this.result = new Result();\n this.gateway = gateway;\n }\n\n async execute(params: IBulkActionOperationTaskParams) {\n const { input, response, isAborted, isCloseToTimeout, context } = params;\n\n try {\n if (isAborted()) {\n return response.aborted();\n } else if (isCloseToTimeout()) {\n return response.continue({\n ...input\n });\n }\n\n // Check if the input contains a model ID.\n if (!input.modelId) {\n return response.error(`Missing \"modelId\" in the input.`);\n }\n\n // Check if the model exists.\n const model = await context.cms.getModel(input.modelId);\n\n if (!model) {\n return response.error(`Model with ${input.modelId} not found!`);\n }\n\n // Check if there are any IDs to process.\n if (!input.ids || input.ids.length === 0) {\n return response.done(\n `Task done: no entries to process for \"${input.modelId}\" model.`\n );\n }\n\n // Set the security identity in the context.\n context.security.setIdentity(input.identity);\n\n // Process each ID in the input.\n for (const id of input.ids) {\n try {\n // Execute the gateway operation for the current ID.\n await this.gateway.execute(model, id, input.data);\n // Add the ID to the list of successfully processed entries.\n this.result.addDone(id);\n } catch (ex) {\n console.error(ex.message || `Failed to process entry with id \"${id}\".`);\n // Add the ID to the list of failed entries.\n this.result.addFailed(id);\n }\n }\n\n // Return a done response with the results of the processing.\n return response.done(`Task done: all entries processed for \"${model.name}\" model.`, {\n done: this.result.getDone(),\n failed: this.result.getFailed()\n });\n } catch (ex) {\n return response.error(ex.message ?? `Error while processing task.`);\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,WAAW,CAAC;EAIrBC,WAAWA,CAACC,OAAsB,EAAE;IAChC,IAAI,CAACC,MAAM,GAAG,IAAIC,cAAM,CAAC,CAAC;IAC1B,IAAI,CAACF,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMG,OAAOA,CAACC,MAAsC,EAAE;IAClD,MAAM;MAAEC,KAAK;MAAEC,QAAQ;MAAEC,SAAS;MAAEC,gBAAgB;MAAEC;IAAQ,CAAC,GAAGL,MAAM;IAExE,IAAI;MACA,IAAIG,SAAS,CAAC,CAAC,EAAE;QACb,OAAOD,QAAQ,CAACI,OAAO,CAAC,CAAC;MAC7B,CAAC,MAAM,IAAIF,gBAAgB,CAAC,CAAC,EAAE;QAC3B,OAAOF,QAAQ,CAACK,QAAQ,CAAC;UACrB,GAAGN;QACP,CAAC,CAAC;MACN;;MAEA;MACA,IAAI,CAACA,KAAK,CAACO,OAAO,EAAE;QAChB,OAAON,QAAQ,CAACO,KAAK,CAAE,iCAAgC,CAAC;MAC5D;;MAEA;MACA,MAAMC,KAAK,GAAG,MAAML,OAAO,CAACM,GAAG,CAACC,QAAQ,CAACX,KAAK,CAACO,OAAO,CAAC;MAEvD,IAAI,CAACE,KAAK,EAAE;QACR,OAAOR,QAAQ,CAACO,KAAK,CAAE,cAAaR,KAAK,CAACO,OAAQ,aAAY,CAAC;MACnE;;MAEA;MACA,IAAI,CAACP,KAAK,CAACY,GAAG,IAAIZ,KAAK,CAACY,GAAG,CAACC,MAAM,KAAK,CAAC,EAAE;QACtC,OAAOZ,QAAQ,CAACa,IAAI,CACf,yCAAwCd,KAAK,CAACO,OAAQ,UAC3D,CAAC;MACL;;MAEA;MACAH,OAAO,CAACW,QAAQ,CAACC,WAAW,CAAChB,KAAK,CAACiB,QAAQ,CAAC;;MAE5C;MACA,KAAK,MAAMC,EAAE,IAAIlB,KAAK,CAACY,GAAG,EAAE;QACxB,IAAI;UACA;UACA,MAAM,IAAI,CAACjB,OAAO,CAACG,OAAO,CAACW,KAAK,EAAES,EAAE,EAAElB,KAAK,CAACmB,IAAI,CAAC;UACjD;UACA,IAAI,CAACvB,MAAM,CAACwB,OAAO,CAACF,EAAE,CAAC;QAC3B,CAAC,CAAC,OAAOG,EAAE,EAAE;UACTC,OAAO,CAACd,KAAK,CAACa,EAAE,CAACE,OAAO,IAAK,oCAAmCL,EAAG,IAAG,CAAC;UACvE;UACA,IAAI,CAACtB,MAAM,CAAC4B,SAAS,CAACN,EAAE,CAAC;QAC7B;MACJ;;MAEA;MACA,OAAOjB,QAAQ,CAACa,IAAI,CAAE,yCAAwCL,KAAK,CAACgB,IAAK,UAAS,EAAE;QAChFX,IAAI,EAAE,IAAI,CAAClB,MAAM,CAAC8B,OAAO,CAAC,CAAC;QAC3BC,MAAM,EAAE,IAAI,CAAC/B,MAAM,CAACgC,SAAS,CAAC;MAClC,CAAC,CAAC;IACN,CAAC,CAAC,OAAOP,EAAE,EAAE;MACT,OAAOpB,QAAQ,CAACO,KAAK,CAACa,EAAE,CAACE,OAAO,IAAK,8BAA6B,CAAC;IACvE;EACJ;AACJ;AAACM,OAAA,CAAApC,WAAA,GAAAA,WAAA","ignoreList":[]}
1
+ {"version":3,"names":["_Result","require","ProcessTask","constructor","gateway","result","Result","execute","params","input","response","isAborted","isCloseToTimeout","context","aborted","continue","modelId","error","model","cms","getModel","ids","length","done","security","setIdentity","identity","id","data","addDone","ex","console","message","addFailed","name","getDone","failed","getFailed","exports"],"sources":["ProcessTask.ts"],"sourcesContent":["import { Result } from \"./Result\";\nimport { IBulkActionOperationTaskParams } from \"~/types\";\nimport { IProcessEntry } from \"~/abstractions\";\n\n/**\n * The `ProcessTask` class is responsible for processing a batch of entries\n * based on the provided parameters. It uses a gateway to perform the actual\n * processing and maintains the results of the operations, including successfully\n * processed and failed entries.\n */\nexport class ProcessTask {\n private readonly result: Result;\n private gateway: IProcessEntry;\n\n constructor(gateway: IProcessEntry) {\n this.result = new Result();\n this.gateway = gateway;\n }\n\n async execute(params: IBulkActionOperationTaskParams) {\n const { input, response, isAborted, isCloseToTimeout, context } = params;\n\n try {\n if (isAborted()) {\n return response.aborted();\n } else if (isCloseToTimeout()) {\n return response.continue({\n ...input\n });\n }\n\n // Check if the input contains a model ID.\n if (!input.modelId) {\n return response.error(`Missing \"modelId\" in the input.`);\n }\n\n // Check if the model exists.\n const model = await context.cms.getModel(input.modelId);\n\n if (!model) {\n return response.error(`Model with ${input.modelId} not found!`);\n }\n\n // Check if there are any IDs to process.\n if (!input.ids || input.ids.length === 0) {\n return response.done(\n `Task done: no entries to process for \"${input.modelId}\" model.`\n );\n }\n\n // Set the security identity in the context.\n context.security.setIdentity(input.identity);\n\n // Process each ID in the input.\n for (const id of input.ids) {\n try {\n // Execute the gateway operation for the current ID.\n await this.gateway.execute(model, id, input.data);\n // Add the ID to the list of successfully processed entries.\n this.result.addDone(id);\n } catch (ex) {\n console.error(ex.message || `Failed to process entry with id \"${id}\".`);\n // Add the ID to the list of failed entries.\n this.result.addFailed(id);\n }\n }\n\n // Return a done response with the results of the processing.\n return response.done(`Task done: all entries processed for \"${model.name}\" model.`, {\n done: this.result.getDone(),\n failed: this.result.getFailed()\n });\n } catch (ex) {\n return response.error(ex.message ?? `Error while processing task.`);\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,WAAW,CAAC;EAIrBC,WAAWA,CAACC,OAAsB,EAAE;IAChC,IAAI,CAACC,MAAM,GAAG,IAAIC,cAAM,CAAC,CAAC;IAC1B,IAAI,CAACF,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMG,OAAOA,CAACC,MAAsC,EAAE;IAClD,MAAM;MAAEC,KAAK;MAAEC,QAAQ;MAAEC,SAAS;MAAEC,gBAAgB;MAAEC;IAAQ,CAAC,GAAGL,MAAM;IAExE,IAAI;MACA,IAAIG,SAAS,CAAC,CAAC,EAAE;QACb,OAAOD,QAAQ,CAACI,OAAO,CAAC,CAAC;MAC7B,CAAC,MAAM,IAAIF,gBAAgB,CAAC,CAAC,EAAE;QAC3B,OAAOF,QAAQ,CAACK,QAAQ,CAAC;UACrB,GAAGN;QACP,CAAC,CAAC;MACN;;MAEA;MACA,IAAI,CAACA,KAAK,CAACO,OAAO,EAAE;QAChB,OAAON,QAAQ,CAACO,KAAK,CAAC,iCAAiC,CAAC;MAC5D;;MAEA;MACA,MAAMC,KAAK,GAAG,MAAML,OAAO,CAACM,GAAG,CAACC,QAAQ,CAACX,KAAK,CAACO,OAAO,CAAC;MAEvD,IAAI,CAACE,KAAK,EAAE;QACR,OAAOR,QAAQ,CAACO,KAAK,CAAC,cAAcR,KAAK,CAACO,OAAO,aAAa,CAAC;MACnE;;MAEA;MACA,IAAI,CAACP,KAAK,CAACY,GAAG,IAAIZ,KAAK,CAACY,GAAG,CAACC,MAAM,KAAK,CAAC,EAAE;QACtC,OAAOZ,QAAQ,CAACa,IAAI,CAChB,yCAAyCd,KAAK,CAACO,OAAO,UAC1D,CAAC;MACL;;MAEA;MACAH,OAAO,CAACW,QAAQ,CAACC,WAAW,CAAChB,KAAK,CAACiB,QAAQ,CAAC;;MAE5C;MACA,KAAK,MAAMC,EAAE,IAAIlB,KAAK,CAACY,GAAG,EAAE;QACxB,IAAI;UACA;UACA,MAAM,IAAI,CAACjB,OAAO,CAACG,OAAO,CAACW,KAAK,EAAES,EAAE,EAAElB,KAAK,CAACmB,IAAI,CAAC;UACjD;UACA,IAAI,CAACvB,MAAM,CAACwB,OAAO,CAACF,EAAE,CAAC;QAC3B,CAAC,CAAC,OAAOG,EAAE,EAAE;UACTC,OAAO,CAACd,KAAK,CAACa,EAAE,CAACE,OAAO,IAAI,oCAAoCL,EAAE,IAAI,CAAC;UACvE;UACA,IAAI,CAACtB,MAAM,CAAC4B,SAAS,CAACN,EAAE,CAAC;QAC7B;MACJ;;MAEA;MACA,OAAOjB,QAAQ,CAACa,IAAI,CAAC,yCAAyCL,KAAK,CAACgB,IAAI,UAAU,EAAE;QAChFX,IAAI,EAAE,IAAI,CAAClB,MAAM,CAAC8B,OAAO,CAAC,CAAC;QAC3BC,MAAM,EAAE,IAAI,CAAC/B,MAAM,CAACgC,SAAS,CAAC;MAClC,CAAC,CAAC;IACN,CAAC,CAAC,OAAOP,EAAE,EAAE;MACT,OAAOpB,QAAQ,CAACO,KAAK,CAACa,EAAE,CAACE,OAAO,IAAI,8BAA8B,CAAC;IACvE;EACJ;AACJ;AAACM,OAAA,CAAApC,WAAA,GAAAA,WAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_tasks","require","_types","ProcessTasksByModel","constructor","taskDefinition","execute","params","response","input","isAborted","isCloseToTimeout","context","store","aborted","continue","action","BulkActionOperationByModelAction","PROCESS_SUBTASKS","items","tasks","listTasks","where","parentId","getTask","id","definitionId","taskStatus_in","TaskDataStatus","RUNNING","PENDING","limit","length","seconds","CHECK_MORE_SUBTASKS","ex","error","message","exports"],"sources":["ProcessTasksByModel.ts"],"sourcesContent":["import { TaskDataStatus } from \"@webiny/tasks\";\nimport { BulkActionOperationByModelAction, IBulkActionOperationByModelTaskParams } from \"~/types\";\n\n/**\n * The `ProcessTasksByModel` class is responsible for processing tasks for a specific model.\n * It checks for any running or pending tasks from the parent task and continues or completes\n * the task based on the status.\n */\nexport class ProcessTasksByModel {\n private taskDefinition: string;\n\n constructor(taskDefinition: string) {\n this.taskDefinition = taskDefinition;\n }\n\n async execute(params: IBulkActionOperationByModelTaskParams) {\n const { response, input, isAborted, isCloseToTimeout, context, store } = params;\n\n try {\n if (isAborted()) {\n return response.aborted();\n } else if (isCloseToTimeout()) {\n return response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n const { items } = await context.tasks.listTasks({\n where: {\n parentId: store.getTask().id,\n definitionId: this.taskDefinition,\n taskStatus_in: [TaskDataStatus.RUNNING, TaskDataStatus.PENDING]\n },\n limit: 1\n });\n\n // If there are running or pending tasks, continue with a wait.\n if (items.length > 0) {\n return response.continue(\n {\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n },\n {\n seconds: 120\n }\n );\n }\n\n return response.continue({\n ...input,\n action: BulkActionOperationByModelAction.CHECK_MORE_SUBTASKS\n });\n } catch (ex) {\n return response.error(\n ex.message ?? `Error while processing task \"${this.taskDefinition}\"`\n );\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACO,MAAME,mBAAmB,CAAC;EAG7BC,WAAWA,CAACC,cAAsB,EAAE;IAChC,IAAI,CAACA,cAAc,GAAGA,cAAc;EACxC;EAEA,MAAMC,OAAOA,CAACC,MAA6C,EAAE;IACzD,MAAM;MAAEC,QAAQ;MAAEC,KAAK;MAAEC,SAAS;MAAEC,gBAAgB;MAAEC,OAAO;MAAEC;IAAM,CAAC,GAAGN,MAAM;IAE/E,IAAI;MACA,IAAIG,SAAS,CAAC,CAAC,EAAE;QACb,OAAOF,QAAQ,CAACM,OAAO,CAAC,CAAC;MAC7B,CAAC,MAAM,IAAIH,gBAAgB,CAAC,CAAC,EAAE;QAC3B,OAAOH,QAAQ,CAACO,QAAQ,CAAC;UACrB,GAAGN,KAAK;UACRO,MAAM,EAAEC,uCAAgC,CAACC;QAC7C,CAAC,CAAC;MACN;MAEA,MAAM;QAAEC;MAAM,CAAC,GAAG,MAAMP,OAAO,CAACQ,KAAK,CAACC,SAAS,CAAC;QAC5CC,KAAK,EAAE;UACHC,QAAQ,EAAEV,KAAK,CAACW,OAAO,CAAC,CAAC,CAACC,EAAE;UAC5BC,YAAY,EAAE,IAAI,CAACrB,cAAc;UACjCsB,aAAa,EAAE,CAACC,qBAAc,CAACC,OAAO,EAAED,qBAAc,CAACE,OAAO;QAClE,CAAC;QACDC,KAAK,EAAE;MACX,CAAC,CAAC;;MAEF;MACA,IAAIZ,KAAK,CAACa,MAAM,GAAG,CAAC,EAAE;QAClB,OAAOxB,QAAQ,CAACO,QAAQ,CACpB;UACI,GAAGN,KAAK;UACRO,MAAM,EAAEC,uCAAgC,CAACC;QAC7C,CAAC,EACD;UACIe,OAAO,EAAE;QACb,CACJ,CAAC;MACL;MAEA,OAAOzB,QAAQ,CAACO,QAAQ,CAAC;QACrB,GAAGN,KAAK;QACRO,MAAM,EAAEC,uCAAgC,CAACiB;MAC7C,CAAC,CAAC;IACN,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,OAAO3B,QAAQ,CAAC4B,KAAK,CACjBD,EAAE,CAACE,OAAO,IAAK,gCAA+B,IAAI,CAAChC,cAAe,GACtE,CAAC;IACL;EACJ;AACJ;AAACiC,OAAA,CAAAnC,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_tasks","require","_types","ProcessTasksByModel","constructor","taskDefinition","execute","params","response","input","isAborted","isCloseToTimeout","context","store","aborted","continue","action","BulkActionOperationByModelAction","PROCESS_SUBTASKS","items","tasks","listTasks","where","parentId","getTask","id","definitionId","taskStatus_in","TaskDataStatus","RUNNING","PENDING","limit","length","seconds","CHECK_MORE_SUBTASKS","ex","error","message","exports"],"sources":["ProcessTasksByModel.ts"],"sourcesContent":["import { TaskDataStatus } from \"@webiny/tasks\";\nimport { BulkActionOperationByModelAction, IBulkActionOperationByModelTaskParams } from \"~/types\";\n\n/**\n * The `ProcessTasksByModel` class is responsible for processing tasks for a specific model.\n * It checks for any running or pending tasks from the parent task and continues or completes\n * the task based on the status.\n */\nexport class ProcessTasksByModel {\n private taskDefinition: string;\n\n constructor(taskDefinition: string) {\n this.taskDefinition = taskDefinition;\n }\n\n async execute(params: IBulkActionOperationByModelTaskParams) {\n const { response, input, isAborted, isCloseToTimeout, context, store } = params;\n\n try {\n if (isAborted()) {\n return response.aborted();\n } else if (isCloseToTimeout()) {\n return response.continue({\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n });\n }\n\n const { items } = await context.tasks.listTasks({\n where: {\n parentId: store.getTask().id,\n definitionId: this.taskDefinition,\n taskStatus_in: [TaskDataStatus.RUNNING, TaskDataStatus.PENDING]\n },\n limit: 1\n });\n\n // If there are running or pending tasks, continue with a wait.\n if (items.length > 0) {\n return response.continue(\n {\n ...input,\n action: BulkActionOperationByModelAction.PROCESS_SUBTASKS\n },\n {\n seconds: 120\n }\n );\n }\n\n return response.continue({\n ...input,\n action: BulkActionOperationByModelAction.CHECK_MORE_SUBTASKS\n });\n } catch (ex) {\n return response.error(\n ex.message ?? `Error while processing task \"${this.taskDefinition}\"`\n );\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACO,MAAME,mBAAmB,CAAC;EAG7BC,WAAWA,CAACC,cAAsB,EAAE;IAChC,IAAI,CAACA,cAAc,GAAGA,cAAc;EACxC;EAEA,MAAMC,OAAOA,CAACC,MAA6C,EAAE;IACzD,MAAM;MAAEC,QAAQ;MAAEC,KAAK;MAAEC,SAAS;MAAEC,gBAAgB;MAAEC,OAAO;MAAEC;IAAM,CAAC,GAAGN,MAAM;IAE/E,IAAI;MACA,IAAIG,SAAS,CAAC,CAAC,EAAE;QACb,OAAOF,QAAQ,CAACM,OAAO,CAAC,CAAC;MAC7B,CAAC,MAAM,IAAIH,gBAAgB,CAAC,CAAC,EAAE;QAC3B,OAAOH,QAAQ,CAACO,QAAQ,CAAC;UACrB,GAAGN,KAAK;UACRO,MAAM,EAAEC,uCAAgC,CAACC;QAC7C,CAAC,CAAC;MACN;MAEA,MAAM;QAAEC;MAAM,CAAC,GAAG,MAAMP,OAAO,CAACQ,KAAK,CAACC,SAAS,CAAC;QAC5CC,KAAK,EAAE;UACHC,QAAQ,EAAEV,KAAK,CAACW,OAAO,CAAC,CAAC,CAACC,EAAE;UAC5BC,YAAY,EAAE,IAAI,CAACrB,cAAc;UACjCsB,aAAa,EAAE,CAACC,qBAAc,CAACC,OAAO,EAAED,qBAAc,CAACE,OAAO;QAClE,CAAC;QACDC,KAAK,EAAE;MACX,CAAC,CAAC;;MAEF;MACA,IAAIZ,KAAK,CAACa,MAAM,GAAG,CAAC,EAAE;QAClB,OAAOxB,QAAQ,CAACO,QAAQ,CACpB;UACI,GAAGN,KAAK;UACRO,MAAM,EAAEC,uCAAgC,CAACC;QAC7C,CAAC,EACD;UACIe,OAAO,EAAE;QACb,CACJ,CAAC;MACL;MAEA,OAAOzB,QAAQ,CAACO,QAAQ,CAAC;QACrB,GAAGN,KAAK;QACRO,MAAM,EAAEC,uCAAgC,CAACiB;MAC7C,CAAC,CAAC;IACN,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,OAAO3B,QAAQ,CAAC4B,KAAK,CACjBD,EAAE,CAACE,OAAO,IAAI,gCAAgC,IAAI,CAAChC,cAAc,GACrE,CAAC;IACL;EACJ;AACJ;AAACiC,OAAA,CAAAnC,mBAAA,GAAAA,mBAAA","ignoreList":[]}