@webiny/api-headless-cms-bulk-actions 5.43.3 → 6.0.0-alpha.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/abstractions/IListEntries.d.ts +1 -1
- package/abstractions/IListEntries.js.map +1 -1
- package/abstractions/IProcessEntry.d.ts +1 -1
- package/abstractions/IProcessEntry.js.map +1 -1
- package/handlers/eventBridgeEventHandler.js.map +1 -1
- package/handlers/index.d.ts +1 -1
- package/handlers/setupEventsTenant.d.ts +1 -1
- package/index.d.ts +1 -1
- package/package.json +17 -17
- package/plugins/createBulkAction.d.ts +2 -2
- package/plugins/createBulkAction.js.map +1 -1
- package/plugins/createBulkActionGraphQL.d.ts +1 -1
- package/plugins/createBulkActionGraphQL.js.map +1 -1
- package/plugins/createBulkActionTasks.d.ts +2 -2
- package/plugins/createBulkActionTasks.js.map +1 -1
- package/plugins/createDefaultGraphQL.d.ts +1 -1
- package/plugins/createDefaultGraphQL.js.map +1 -1
- package/tasks/createEmptyTrashBinsTask.d.ts +1 -1
- package/tasks/createEmptyTrashBinsTask.js.map +1 -1
- package/types.d.ts +4 -4
- package/types.js.map +1 -1
- package/useCases/DeleteEntry.d.ts +3 -3
- package/useCases/DeleteEntry.js.map +1 -1
- package/useCases/ListDeletedEntries.d.ts +3 -3
- package/useCases/ListDeletedEntries.js.map +1 -1
- package/useCases/ListLatestEntries.d.ts +3 -3
- package/useCases/ListLatestEntries.js.map +1 -1
- package/useCases/ListNotPublishedEntries.d.ts +3 -3
- package/useCases/ListNotPublishedEntries.js.map +1 -1
- package/useCases/ListPublishedEntries.d.ts +3 -3
- package/useCases/ListPublishedEntries.js.map +1 -1
- package/useCases/MoveEntryToFolder.d.ts +3 -3
- package/useCases/MoveEntryToFolder.js.map +1 -1
- package/useCases/MoveEntryToTrash.d.ts +3 -3
- package/useCases/MoveEntryToTrash.js.map +1 -1
- package/useCases/PublishEntry.d.ts +3 -3
- package/useCases/PublishEntry.js.map +1 -1
- package/useCases/RestoreEntryFromTrash.d.ts +3 -3
- package/useCases/RestoreEntryFromTrash.js.map +1 -1
- package/useCases/UnpublishEntry.d.ts +3 -3
- package/useCases/UnpublishEntry.js.map +1 -1
- package/useCases/internals/ChildTaskCleanup/ChildTasksCleanup.d.ts +2 -2
- package/useCases/internals/ChildTaskCleanup/ChildTasksCleanup.js.map +1 -1
- package/useCases/internals/CreateTasksByModel/CreateTasksByModel.d.ts +3 -3
- package/useCases/internals/CreateTasksByModel/CreateTasksByModel.js.map +1 -1
- package/useCases/internals/CreateTasksByModel/TaskCache.d.ts +2 -2
- package/useCases/internals/CreateTasksByModel/TaskCache.js.map +1 -1
- package/useCases/internals/ProcessTask/ProcessTask.d.ts +2 -2
- package/useCases/internals/ProcessTask/ProcessTask.js.map +1 -1
- package/useCases/internals/ProcessTasksByModel/ProcessTasksByModel.d.ts +1 -1
- package/useCases/internals/ProcessTasksByModel/ProcessTasksByModel.js.map +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CmsEntry, CmsEntryListParams, CmsEntryMeta } from "@webiny/api-headless-cms/types";
|
|
1
|
+
import type { CmsEntry, CmsEntryListParams, CmsEntryMeta } from "@webiny/api-headless-cms/types";
|
|
2
2
|
export interface IListEntries {
|
|
3
3
|
execute: (modelId: string, params: CmsEntryListParams) => Promise<{
|
|
4
4
|
entries: CmsEntry[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["IListEntries.ts"],"sourcesContent":["import { CmsEntry, CmsEntryListParams, CmsEntryMeta } from \"@webiny/api-headless-cms/types\";\n\nexport interface IListEntries {\n execute: (\n modelId: string,\n params: CmsEntryListParams\n ) => Promise<{ entries: CmsEntry[]; meta: CmsEntryMeta }>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["IListEntries.ts"],"sourcesContent":["import type { CmsEntry, CmsEntryListParams, CmsEntryMeta } from \"@webiny/api-headless-cms/types\";\n\nexport interface IListEntries {\n execute: (\n modelId: string,\n params: CmsEntryListParams\n ) => Promise<{ entries: CmsEntry[]; meta: CmsEntryMeta }>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["IProcessEntry.ts"],"sourcesContent":["import { CmsModel } from \"@webiny/api-headless-cms/types\";\n\nexport interface IProcessEntry {\n execute: (model: CmsModel, id: string, data?: any) => Promise<void>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["IProcessEntry.ts"],"sourcesContent":["import type { CmsModel } from \"@webiny/api-headless-cms/types\";\n\nexport interface IProcessEntry {\n execute: (model: CmsModel, id: string, data?: any) => Promise<void>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_handlerAws","require","DETAIL_TYPE","createEventBridgeHandler","handler","createEventBridgeEventHandler","context","ctx","payload","next","tasks","tenancy","console","error","withRootTenant","trigger","definition","ex","JSON","stringify","message","code","data","name","type","exports"],"sources":["eventBridgeEventHandler.ts"],"sourcesContent":["import { createEventBridgeEventHandler } from \"@webiny/handler-aws\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nconst DETAIL_TYPE = \"WebinyEmptyTrashBin\";\n\nexport const createEventBridgeHandler = () => {\n const handler = createEventBridgeEventHandler<typeof DETAIL_TYPE, Record<string, any>>(\n async ({ context: ctx, payload, next }) => {\n try {\n /**\n * If we receive an event that is not \"WebinyEmptyTrashBin\", we should exit.\n */\n if (payload[\"detail-type\"] !== DETAIL_TYPE) {\n return next();\n }\n\n const context = ctx as unknown as HcmsBulkActionsContext;\n\n if (!context.tasks || !context.tenancy) {\n console.error(\"Missing tasks or tenancy definition on context.\");\n return;\n }\n\n /**\n * Since the event is at the infrastructure level, it has no knowledge about tenancy.\n * We trigger the `hcmsEntriesEmptyTrashBins` using root tenant.\n */\n await context.tenancy.withRootTenant(async () => {\n await context.tasks.trigger({\n definition: \"hcmsEntriesEmptyTrashBins\"\n });\n });\n\n return;\n } catch (ex) {\n console.error(\n \"[EVENT_BRIDGE_HANDLER_EMPTY_TRASH_BIN] => \",\n JSON.stringify({\n message: ex.message,\n code: ex.code,\n data: ex.data\n })\n );\n }\n }\n );\n\n // Assign a human-readable name for easier debugging.\n handler.name = handler.type + \".cmsBulkActions\";\n\n return handler;\n};\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAGA,MAAMC,WAAW,GAAG,qBAAqB;AAElC,MAAMC,wBAAwB,GAAGA,CAAA,KAAM;EAC1C,MAAMC,OAAO,GAAG,IAAAC,yCAA6B,EACzC,OAAO;IAAEC,OAAO,EAAEC,GAAG;IAAEC,OAAO;IAAEC;EAAK,CAAC,KAAK;IACvC,IAAI;MACA;AAChB;AACA;MACgB,IAAID,OAAO,CAAC,aAAa,CAAC,KAAKN,WAAW,EAAE;QACxC,OAAOO,IAAI,CAAC,CAAC;MACjB;MAEA,MAAMH,OAAO,GAAGC,GAAwC;MAExD,IAAI,CAACD,OAAO,CAACI,KAAK,IAAI,CAACJ,OAAO,CAACK,OAAO,EAAE;QACpCC,OAAO,CAACC,KAAK,CAAC,iDAAiD,CAAC;QAChE;MACJ;;MAEA;AAChB;AACA;AACA;MACgB,MAAMP,OAAO,CAACK,OAAO,CAACG,cAAc,CAAC,YAAY;QAC7C,MAAMR,OAAO,CAACI,KAAK,CAACK,OAAO,CAAC;UACxBC,UAAU,EAAE;QAChB,CAAC,CAAC;MACN,CAAC,CAAC;MAEF;IACJ,CAAC,CAAC,OAAOC,EAAE,EAAE;MACTL,OAAO,CAACC,KAAK,CACT,4CAA4C,EAC5CK,IAAI,CAACC,SAAS,CAAC;QACXC,OAAO,EAAEH,EAAE,CAACG,OAAO;QACnBC,IAAI,EAAEJ,EAAE,CAACI,IAAI;QACbC,IAAI,EAAEL,EAAE,CAACK;MACb,CAAC,CACL,CAAC;IACL;EACJ,CACJ,CAAC;;EAED;EACAlB,OAAO,CAACmB,IAAI,GAAGnB,OAAO,CAACoB,IAAI,GAAG,iBAAiB;EAE/C,OAAOpB,OAAO;AAClB,CAAC;AAACqB,OAAA,CAAAtB,wBAAA,GAAAA,wBAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_handlerAws","require","DETAIL_TYPE","createEventBridgeHandler","handler","createEventBridgeEventHandler","context","ctx","payload","next","tasks","tenancy","console","error","withRootTenant","trigger","definition","ex","JSON","stringify","message","code","data","name","type","exports"],"sources":["eventBridgeEventHandler.ts"],"sourcesContent":["import { createEventBridgeEventHandler } from \"@webiny/handler-aws\";\nimport type { HcmsBulkActionsContext } from \"~/types\";\n\nconst DETAIL_TYPE = \"WebinyEmptyTrashBin\";\n\nexport const createEventBridgeHandler = () => {\n const handler = createEventBridgeEventHandler<typeof DETAIL_TYPE, Record<string, any>>(\n async ({ context: ctx, payload, next }) => {\n try {\n /**\n * If we receive an event that is not \"WebinyEmptyTrashBin\", we should exit.\n */\n if (payload[\"detail-type\"] !== DETAIL_TYPE) {\n return next();\n }\n\n const context = ctx as unknown as HcmsBulkActionsContext;\n\n if (!context.tasks || !context.tenancy) {\n console.error(\"Missing tasks or tenancy definition on context.\");\n return;\n }\n\n /**\n * Since the event is at the infrastructure level, it has no knowledge about tenancy.\n * We trigger the `hcmsEntriesEmptyTrashBins` using root tenant.\n */\n await context.tenancy.withRootTenant(async () => {\n await context.tasks.trigger({\n definition: \"hcmsEntriesEmptyTrashBins\"\n });\n });\n\n return;\n } catch (ex) {\n console.error(\n \"[EVENT_BRIDGE_HANDLER_EMPTY_TRASH_BIN] => \",\n JSON.stringify({\n message: ex.message,\n code: ex.code,\n data: ex.data\n })\n );\n }\n }\n );\n\n // Assign a human-readable name for easier debugging.\n handler.name = handler.type + \".cmsBulkActions\";\n\n return handler;\n};\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAGA,MAAMC,WAAW,GAAG,qBAAqB;AAElC,MAAMC,wBAAwB,GAAGA,CAAA,KAAM;EAC1C,MAAMC,OAAO,GAAG,IAAAC,yCAA6B,EACzC,OAAO;IAAEC,OAAO,EAAEC,GAAG;IAAEC,OAAO;IAAEC;EAAK,CAAC,KAAK;IACvC,IAAI;MACA;AAChB;AACA;MACgB,IAAID,OAAO,CAAC,aAAa,CAAC,KAAKN,WAAW,EAAE;QACxC,OAAOO,IAAI,CAAC,CAAC;MACjB;MAEA,MAAMH,OAAO,GAAGC,GAAwC;MAExD,IAAI,CAACD,OAAO,CAACI,KAAK,IAAI,CAACJ,OAAO,CAACK,OAAO,EAAE;QACpCC,OAAO,CAACC,KAAK,CAAC,iDAAiD,CAAC;QAChE;MACJ;;MAEA;AAChB;AACA;AACA;MACgB,MAAMP,OAAO,CAACK,OAAO,CAACG,cAAc,CAAC,YAAY;QAC7C,MAAMR,OAAO,CAACI,KAAK,CAACK,OAAO,CAAC;UACxBC,UAAU,EAAE;QAChB,CAAC,CAAC;MACN,CAAC,CAAC;MAEF;IACJ,CAAC,CAAC,OAAOC,EAAE,EAAE;MACTL,OAAO,CAACC,KAAK,CACT,4CAA4C,EAC5CK,IAAI,CAACC,SAAS,CAAC;QACXC,OAAO,EAAEH,EAAE,CAACG,OAAO;QACnBC,IAAI,EAAEJ,EAAE,CAACI,IAAI;QACbC,IAAI,EAAEL,EAAE,CAACK;MACb,CAAC,CACL,CAAC;IACL;EACJ,CACJ,CAAC;;EAED;EACAlB,OAAO,CAACmB,IAAI,GAAGnB,OAAO,CAACoB,IAAI,GAAG,iBAAiB;EAE/C,OAAOpB,OAAO;AAClB,CAAC;AAACqB,OAAA,CAAAtB,wBAAA,GAAAA,wBAAA","ignoreList":[]}
|
package/handlers/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const createHandlers: () => (import("@webiny/handler-aws").EventBridgeEventHandler<"WebinyEmptyTrashBin", Record<string, any>, any> | import("@webiny/handler").HandlerOnRequestPlugin)[];
|
|
1
|
+
export declare const createHandlers: () => (import("@webiny/handler-aws").EventBridgeEventHandler<"WebinyEmptyTrashBin", Record<string, any>, any> | import("@webiny/handler").HandlerOnRequestPlugin<import("@webiny/handler/types").Context>)[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const setupEventsTenant: () => import("@webiny/handler").HandlerOnRequestPlugin
|
|
1
|
+
export declare const setupEventsTenant: () => import("@webiny/handler").HandlerOnRequestPlugin<import("@webiny/handler/types").Context>;
|
package/index.d.ts
CHANGED
|
@@ -3,4 +3,4 @@ export * from "./handlers";
|
|
|
3
3
|
export * from "./useCases";
|
|
4
4
|
export * from "./plugins";
|
|
5
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>)[];
|
|
6
|
+
export declare const createHcmsBulkActions: () => ((import("@webiny/handler-aws").EventBridgeEventHandler<"WebinyEmptyTrashBin", Record<string, any>, any> | import("@webiny/handler").HandlerOnRequestPlugin<import("@webiny/handler/types").Context>)[] | import("@webiny/api").ContextPlugin<import("./types").HcmsBulkActionsContext>)[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-headless-cms-bulk-actions",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0-alpha.1",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"description": "Webiny Headless CMS bulk actions",
|
|
6
6
|
"keywords": [
|
|
@@ -13,23 +13,23 @@
|
|
|
13
13
|
},
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@webiny/api-headless-cms": "
|
|
17
|
-
"@webiny/handler": "
|
|
18
|
-
"@webiny/handler-aws": "
|
|
19
|
-
"@webiny/tasks": "
|
|
20
|
-
"@webiny/utils": "
|
|
16
|
+
"@webiny/api-headless-cms": "6.0.0-alpha.1",
|
|
17
|
+
"@webiny/handler": "6.0.0-alpha.1",
|
|
18
|
+
"@webiny/handler-aws": "6.0.0-alpha.1",
|
|
19
|
+
"@webiny/tasks": "6.0.0-alpha.1",
|
|
20
|
+
"@webiny/utils": "6.0.0-alpha.1"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@webiny/api": "
|
|
24
|
-
"@webiny/api-admin-users": "
|
|
25
|
-
"@webiny/api-i18n": "
|
|
26
|
-
"@webiny/api-security": "
|
|
27
|
-
"@webiny/api-tenancy": "
|
|
28
|
-
"@webiny/api-wcp": "
|
|
29
|
-
"@webiny/handler-graphql": "
|
|
30
|
-
"@webiny/plugins": "
|
|
31
|
-
"@webiny/project-utils": "
|
|
32
|
-
"@webiny/wcp": "
|
|
23
|
+
"@webiny/api": "6.0.0-alpha.1",
|
|
24
|
+
"@webiny/api-admin-users": "6.0.0-alpha.1",
|
|
25
|
+
"@webiny/api-i18n": "6.0.0-alpha.1",
|
|
26
|
+
"@webiny/api-security": "6.0.0-alpha.1",
|
|
27
|
+
"@webiny/api-tenancy": "6.0.0-alpha.1",
|
|
28
|
+
"@webiny/api-wcp": "6.0.0-alpha.1",
|
|
29
|
+
"@webiny/handler-graphql": "6.0.0-alpha.1",
|
|
30
|
+
"@webiny/plugins": "6.0.0-alpha.1",
|
|
31
|
+
"@webiny/project-utils": "6.0.0-alpha.1",
|
|
32
|
+
"@webiny/wcp": "6.0.0-alpha.1",
|
|
33
33
|
"graphql": "15.9.0",
|
|
34
34
|
"typescript": "5.3.3"
|
|
35
35
|
},
|
|
@@ -41,5 +41,5 @@
|
|
|
41
41
|
"access": "public",
|
|
42
42
|
"directory": "dist"
|
|
43
43
|
},
|
|
44
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "9bd236cf5e689f209a11bec089207dcc2d41a53c"
|
|
45
45
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { IListEntries, IProcessEntry } from "../abstractions";
|
|
2
|
-
import { HcmsBulkActionsContext } from "../types";
|
|
1
|
+
import type { IListEntries, IProcessEntry } from "../abstractions";
|
|
2
|
+
import type { HcmsBulkActionsContext } from "../types";
|
|
3
3
|
export interface CreateBulkActionConfig {
|
|
4
4
|
name: string;
|
|
5
5
|
dataLoader: (context: HcmsBulkActionsContext) => IListEntries;
|
|
@@ -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","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":[]}
|
|
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 type { IListEntries, IProcessEntry } from \"~/abstractions\";\nimport type { 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":[]}
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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 type { 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,5 +1,5 @@
|
|
|
1
|
-
import { IListEntries, IProcessEntry } from "../abstractions";
|
|
2
|
-
import { HcmsBulkActionsContext, IBulkActionOperationByModelInput, IBulkActionOperationByModelOutput, IBulkActionOperationInput, IBulkActionOperationOutput } from "../types";
|
|
1
|
+
import type { IListEntries, IProcessEntry } from "../abstractions";
|
|
2
|
+
import type { HcmsBulkActionsContext, IBulkActionOperationByModelInput, IBulkActionOperationByModelOutput, IBulkActionOperationInput, IBulkActionOperationOutput } from "../types";
|
|
3
3
|
export interface CreateBackgroundTasksConfig {
|
|
4
4
|
name: string;
|
|
5
5
|
dataLoader: (context: HcmsBulkActionsContext) => IListEntries;
|
|
@@ -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":"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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 type { ITask } from \"@webiny/tasks\";\nimport { createPrivateTaskDefinition } from \"@webiny/tasks\";\nimport type { IListEntries, IProcessEntry } from \"~/abstractions\";\nimport {\n ChildTasksCleanup,\n CreateTasksByModel,\n ProcessTask,\n ProcessTasksByModel\n} from \"~/useCases/internals\";\nimport type {\n HcmsBulkActionsContext,\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput,\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n} from \"~/types\";\nimport { BulkActionOperationByModelAction } from \"~/types\";\n\nexport interface CreateBackgroundTasksConfig {\n name: string;\n dataLoader: (context: HcmsBulkActionsContext) => IListEntries;\n dataProcessor: (context: HcmsBulkActionsContext) => IProcessEntry;\n batchSize?: number;\n}\n\nconst BATCH_SIZE = 100; // Default number of entries to fetch in each batch\n\nclass BulkActionTasks {\n private readonly name: string;\n private readonly dataLoader: (context: HcmsBulkActionsContext) => IListEntries;\n private readonly dataProcessor: (context: HcmsBulkActionsContext) => IProcessEntry;\n private readonly batchSize: number;\n\n constructor(config: CreateBackgroundTasksConfig) {\n this.name = config.name;\n this.dataLoader = config.dataLoader;\n this.dataProcessor = config.dataProcessor;\n this.batchSize = config.batchSize || BATCH_SIZE;\n }\n\n public createListTaskDefinition() {\n return createPrivateTaskDefinition<\n HcmsBulkActionsContext,\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput\n >({\n id: this.createListTaskDefinitionName(),\n title: `Headless CMS: list \"${this.name}\" entries by model`,\n maxIterations: 500,\n disableDatabaseLogs: true,\n run: async params => {\n const { response, input, context } = params;\n\n try {\n if (!input.modelId) {\n return response.error(`Missing \"modelId\" in the input.`);\n }\n\n const action = this.getCurrentAction(input);\n\n switch (action) {\n case BulkActionOperationByModelAction.PROCESS_SUBTASKS: {\n const processTasks = new ProcessTasksByModel(\n this.createProcessTaskDefinitionName()\n );\n return await processTasks.execute(params);\n }\n case BulkActionOperationByModelAction.CREATE_SUBTASKS:\n case BulkActionOperationByModelAction.CHECK_MORE_SUBTASKS: {\n const createTasks = new CreateTasksByModel(\n this.createProcessTaskDefinitionName(),\n this.dataLoader(context),\n this.batchSize\n );\n return await createTasks.execute(params);\n }\n case BulkActionOperationByModelAction.END_TASK: {\n return response.done(\n `Task done: task \"${this.createProcessTaskDefinitionName()}\" has been successfully processed for entries from \"${\n input.modelId\n }\" model.`\n );\n }\n default:\n return response.error(`Unknown action: ${action}`);\n }\n } catch (ex) {\n return response.error(ex.message ?? \"Error while executing list task\");\n }\n },\n onDone: async ({ context, task }) => {\n await this.onCreateListTaskDefinitionFinish(context, task, \"done\");\n },\n onError: async ({ context, task }) => {\n await this.onCreateListTaskDefinitionFinish(context, task, \"error\");\n },\n onAbort: async ({ context, task }) => {\n await this.onCreateListTaskDefinitionFinish(context, task, \"abort\");\n },\n onMaxIterations: async ({ context, task }) => {\n await this.onCreateListTaskDefinitionFinish(context, task, \"maxIterations\");\n }\n });\n }\n\n public createProcessTaskDefinition() {\n return createPrivateTaskDefinition<\n HcmsBulkActionsContext,\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n >({\n id: this.createProcessTaskDefinitionName(),\n title: `Headless CMS: process \"${this.name}\" entries`,\n maxIterations: 2,\n disableDatabaseLogs: true,\n run: async params => {\n const { response, context } = params;\n\n try {\n const processTask = new ProcessTask(this.dataProcessor(context));\n return await processTask.execute(params);\n } catch (ex) {\n return response.error(ex.message ?? \"Error while executing process task\");\n }\n }\n });\n }\n\n private createListTaskDefinitionName() {\n return `hcmsBulkList${this.name}Entries`;\n }\n\n private createProcessTaskDefinitionName() {\n return `hcmsBulkProcess${this.name}Entries`;\n }\n\n private getCurrentAction(input: IBulkActionOperationByModelInput) {\n return input.action ?? BulkActionOperationByModelAction.CREATE_SUBTASKS;\n }\n\n private async onCreateListTaskDefinitionFinish(\n context: HcmsBulkActionsContext,\n task: ITask,\n cause: string\n ) {\n /**\n * We want to clean all child tasks and logs, which have no errors.\n */\n const childTasksCleanup = new ChildTasksCleanup();\n try {\n await childTasksCleanup.execute({\n context,\n task\n });\n } catch (ex) {\n console.error(\n `Error while cleaning \"${this.createListTaskDefinitionName()} child tasks - ${cause}.\"`,\n ex\n );\n }\n }\n}\n\nexport const createBulkActionTasks = (config: CreateBackgroundTasksConfig) => {\n const backgroundTasks = new BulkActionTasks(config);\n\n return [\n backgroundTasks.createListTaskDefinition(),\n backgroundTasks.createProcessTaskDefinition()\n ];\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_api","require","_apiHeadlessCms","_constants","createDefaultGraphQL","ContextPlugin","context","tenant","tenancy","getCurrentTenant","locale","i18n","getContentLocale","isHeadlessCmsReady","defaultPlugin","CmsGraphQLSchemaPlugin","typeDefs","name","models","security","withoutAuthorization","allModels","cms","listModels","filter","model","isPrivate","tags","Array","isArray","includes","CMS_MODEL_SINGLETON_TAG","modelPlugins","forEach","plugin","singularApiName","isApplicable","id","code","modelId","push","plugins","register","exports"],"sources":["createDefaultGraphQL.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { 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
|
+
{"version":3,"names":["_api","require","_apiHeadlessCms","_constants","createDefaultGraphQL","ContextPlugin","context","tenant","tenancy","getCurrentTenant","locale","i18n","getContentLocale","isHeadlessCmsReady","defaultPlugin","CmsGraphQLSchemaPlugin","typeDefs","name","models","security","withoutAuthorization","allModels","cms","listModels","filter","model","isPrivate","tags","Array","isArray","includes","CMS_MODEL_SINGLETON_TAG","modelPlugins","forEach","plugin","singularApiName","isApplicable","id","code","modelId","push","plugins","register","exports"],"sources":["createDefaultGraphQL.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport type { HcmsBulkActionsContext } from \"~/types\";\nimport { CmsGraphQLSchemaPlugin, isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"@webiny/api-headless-cms/constants\";\n\nexport const createDefaultGraphQL = () => {\n return new ContextPlugin<HcmsBulkActionsContext>(async context => {\n const tenant = context.tenancy.getCurrentTenant();\n const locale = context.i18n.getContentLocale();\n\n if (!locale || !(await isHeadlessCmsReady(context))) {\n return;\n }\n\n const defaultPlugin = new CmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type BulkActionResponseData {\n id: String\n }\n\n type BulkActionResponse {\n data: BulkActionResponseData\n error: CmsError\n }\n `\n });\n defaultPlugin.name = `headless-cms.graphql.schema.bulkAction.default`;\n\n const models = await context.security.withoutAuthorization(async () => {\n const allModels = await context.cms.listModels();\n return allModels.filter(model => {\n if (model.isPrivate) {\n return false;\n }\n const tags = Array.isArray(model.tags) ? model.tags : [];\n if (tags.includes(CMS_MODEL_SINGLETON_TAG)) {\n return false;\n }\n return true;\n });\n });\n\n const modelPlugins: CmsGraphQLSchemaPlugin<HcmsBulkActionsContext>[] = [];\n\n models.forEach(model => {\n const plugin = new CmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n enum BulkAction${model.singularApiName}Name {\n _empty\n }\n \n extend type Mutation {\n bulkAction${model.singularApiName}(\n action: BulkAction${model.singularApiName}Name!\n where: ${model.singularApiName}ListWhereInput\n search: String\n data: JSON\n ): BulkActionResponse\n }\n `,\n isApplicable: context =>\n context.tenancy.getCurrentTenant().id === tenant.id &&\n context.i18n.getContentLocale()?.code === locale.code\n });\n\n plugin.name = `headless-cms.graphql.schema.bulkAction.default.${model.modelId}`;\n modelPlugins.push(plugin);\n });\n\n context.plugins.register([defaultPlugin, ...modelPlugins]);\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEO,MAAMG,oBAAoB,GAAGA,CAAA,KAAM;EACtC,OAAO,IAAIC,kBAAa,CAAyB,MAAMC,OAAO,IAAI;IAC9D,MAAMC,MAAM,GAAGD,OAAO,CAACE,OAAO,CAACC,gBAAgB,CAAC,CAAC;IACjD,MAAMC,MAAM,GAAGJ,OAAO,CAACK,IAAI,CAACC,gBAAgB,CAAC,CAAC;IAE9C,IAAI,CAACF,MAAM,IAAI,EAAE,MAAM,IAAAG,kCAAkB,EAACP,OAAO,CAAC,CAAC,EAAE;MACjD;IACJ;IAEA,MAAMQ,aAAa,GAAG,IAAIC,sCAAsB,CAAC;MAC7CC,QAAQ,EAAE,aAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,CAAC,CAAC;IACFF,aAAa,CAACG,IAAI,GAAG,gDAAgD;IAErE,MAAMC,MAAM,GAAG,MAAMZ,OAAO,CAACa,QAAQ,CAACC,oBAAoB,CAAC,YAAY;MACnE,MAAMC,SAAS,GAAG,MAAMf,OAAO,CAACgB,GAAG,CAACC,UAAU,CAAC,CAAC;MAChD,OAAOF,SAAS,CAACG,MAAM,CAACC,KAAK,IAAI;QAC7B,IAAIA,KAAK,CAACC,SAAS,EAAE;UACjB,OAAO,KAAK;QAChB;QACA,MAAMC,IAAI,GAAGC,KAAK,CAACC,OAAO,CAACJ,KAAK,CAACE,IAAI,CAAC,GAAGF,KAAK,CAACE,IAAI,GAAG,EAAE;QACxD,IAAIA,IAAI,CAACG,QAAQ,CAACC,kCAAuB,CAAC,EAAE;UACxC,OAAO,KAAK;QAChB;QACA,OAAO,IAAI;MACf,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,MAAMC,YAA8D,GAAG,EAAE;IAEzEd,MAAM,CAACe,OAAO,CAACR,KAAK,IAAI;MACpB,MAAMS,MAAM,GAAG,IAAInB,sCAAsB,CAAC;QACtCC,QAAQ,EAAE,aAAc;AACxC,qCAAqCS,KAAK,CAACU,eAAe;AAC1D;AACA;AACA;AACA;AACA,oCAAoCV,KAAK,CAACU,eAAe;AACzD,gDAAgDV,KAAK,CAACU,eAAe;AACrE,qCAAqCV,KAAK,CAACU,eAAe;AAC1D;AACA;AACA;AACA;AACA,iBAAiB;QACDC,YAAY,EAAE9B,OAAO,IACjBA,OAAO,CAACE,OAAO,CAACC,gBAAgB,CAAC,CAAC,CAAC4B,EAAE,KAAK9B,MAAM,CAAC8B,EAAE,IACnD/B,OAAO,CAACK,IAAI,CAACC,gBAAgB,CAAC,CAAC,EAAE0B,IAAI,KAAK5B,MAAM,CAAC4B;MACzD,CAAC,CAAC;MAEFJ,MAAM,CAACjB,IAAI,GAAG,kDAAkDQ,KAAK,CAACc,OAAO,EAAE;MAC/EP,YAAY,CAACQ,IAAI,CAACN,MAAM,CAAC;IAC7B,CAAC,CAAC;IAEF5B,OAAO,CAACmC,OAAO,CAACC,QAAQ,CAAC,CAAC5B,aAAa,EAAE,GAAGkB,YAAY,CAAC,CAAC;EAC9D,CAAC,CAAC;AACN,CAAC;AAACW,OAAA,CAAAvC,oBAAA,GAAAA,oBAAA","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { HcmsBulkActionsContext, IEmptyTrashBinsInput } from "../types";
|
|
1
|
+
import type { HcmsBulkActionsContext, IEmptyTrashBinsInput } from "../types";
|
|
2
2
|
export declare const createEmptyTrashBinsTask: () => import("@webiny/tasks").TaskDefinitionPlugin<HcmsBulkActionsContext, IEmptyTrashBinsInput, import("@webiny/tasks").ITaskResponseDoneResultOutput>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_tasks","require","_useCases","calculateDateTimeString","retentionPeriodFromEnv","process","env","retentionPeriod","Number","currentDate","Date","setDate","getDate","toISOString","createEmptyTrashBinsTask","createTaskDefinition","isPrivate","id","title","description","maxIterations","disableDatabaseLogs","run","params","response","isAborted","context","input","isCloseToTimeout","aborted","baseTenants","tenancy","listTenants","executedTenantIds","tenants","filter","tenant","includes","shouldContinue","withEachTenant","i18n","reloadLocales","locales","getLocales","withEachLocale","models","security","withoutAuthorization","cms","listModels","m","model","list","createListDeletedEntries","mutation","createDeleteEntry","listEntriesParams","where","deletedOn_lt","limit","result","execute","modelId","meta","totalCount","entry","entries","push","continue","done","exports"],"sources":["createEmptyTrashBinsTask.ts"],"sourcesContent":["import { createTaskDefinition } from \"@webiny/tasks\";\nimport { createDeleteEntry, createListDeletedEntries } from \"~/useCases\";\nimport {\n HcmsBulkActionsContext,\n IEmptyTrashBinsInput,\n IEmptyTrashBinsOutput,\n IEmptyTrashBinsTaskParams\n} from \"~/types\";\n\nconst calculateDateTimeString = () => {\n // Retrieve the retention period from the environment variable WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS,\n // or default to 90 days if not set or set to 0.\n const retentionPeriodFromEnv = process.env[\"WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS\"];\n const retentionPeriod =\n retentionPeriodFromEnv && Number(retentionPeriodFromEnv) !== 0\n ? Number(retentionPeriodFromEnv)\n : 90;\n\n // Calculate the date-time by subtracting the retention period (in days) from the current date.\n const currentDate = new Date();\n currentDate.setDate(currentDate.getDate() - retentionPeriod);\n\n // Return the calculated date-time string in ISO 8601 format.\n return currentDate.toISOString();\n};\n\nexport const createEmptyTrashBinsTask = () => {\n return createTaskDefinition<\n HcmsBulkActionsContext,\n IEmptyTrashBinsInput,\n IEmptyTrashBinsOutput\n >({\n isPrivate: true,\n id: \"hcmsEntriesEmptyTrashBins\",\n title: \"Headless CMS - Empty all trash bins\",\n description: \"Delete all entries in the trash bin for each model in the system.\",\n maxIterations: 120,\n disableDatabaseLogs: true,\n run: async (params: IEmptyTrashBinsTaskParams) => {\n const { response, isAborted, context, input, isCloseToTimeout } = params;\n\n // Abort the task if needed.\n if (isAborted()) {\n return response.aborted();\n }\n\n // Fetch all tenants, excluding those already processed.\n const baseTenants = await context.tenancy.listTenants();\n const executedTenantIds = input.executedTenantIds || [];\n const tenants = baseTenants.filter(tenant => !executedTenantIds.includes(tenant.id));\n let shouldContinue = false; // Flag to check if task should continue.\n\n // Iterate over each tenant.\n await context.tenancy.withEachTenant(tenants, async tenant => {\n if (isCloseToTimeout()) {\n shouldContinue = true;\n return;\n }\n\n // Reloading locales for the current tenant to ensure the correct data is available before proceeding.\n await context.i18n.reloadLocales();\n\n // Fetch all locales for the tenant.\n const locales = context.i18n.getLocales();\n await context.i18n.withEachLocale(locales, async () => {\n if (isCloseToTimeout()) {\n shouldContinue = true;\n return;\n }\n\n // List all non-private models for the current locale.\n const models = await context.security.withoutAuthorization(async () =>\n (await context.cms.listModels()).filter(m => !m.isPrivate)\n );\n\n // Process each model to delete trashed entries.\n for (const model of models) {\n const list = createListDeletedEntries(context); // List trashed entries.\n const mutation = createDeleteEntry(context); // Mutation to delete entries.\n\n // Query parameters for fetching deleted entries older than a minute ago.\n const listEntriesParams = {\n where: { deletedOn_lt: calculateDateTimeString() },\n limit: 50\n };\n\n let result;\n // Continue deleting entries while there are entries left to delete.\n while (\n (result = await list.execute(model.modelId, listEntriesParams)) &&\n result.meta.totalCount > 0\n ) {\n if (isCloseToTimeout()) {\n shouldContinue = true;\n break;\n }\n for (const entry of result.entries) {\n if (isCloseToTimeout()) {\n shouldContinue = true;\n break;\n }\n // Delete each entry individually.\n await mutation.execute(model, entry.id);\n }\n }\n }\n });\n\n // If the task isn't continuing, add the tenant to the executed list.\n if (!shouldContinue) {\n executedTenantIds.push(tenant.id);\n }\n });\n\n // Continue the task or mark it as done based on the `shouldContinue` flag.\n return shouldContinue\n ? response.continue({ ...input, executedTenantIds })\n : response.done(\"Task done: emptied the trash bin for all registered models.\");\n }\n });\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_tasks","require","_useCases","calculateDateTimeString","retentionPeriodFromEnv","process","env","retentionPeriod","Number","currentDate","Date","setDate","getDate","toISOString","createEmptyTrashBinsTask","createTaskDefinition","isPrivate","id","title","description","maxIterations","disableDatabaseLogs","run","params","response","isAborted","context","input","isCloseToTimeout","aborted","baseTenants","tenancy","listTenants","executedTenantIds","tenants","filter","tenant","includes","shouldContinue","withEachTenant","i18n","reloadLocales","locales","getLocales","withEachLocale","models","security","withoutAuthorization","cms","listModels","m","model","list","createListDeletedEntries","mutation","createDeleteEntry","listEntriesParams","where","deletedOn_lt","limit","result","execute","modelId","meta","totalCount","entry","entries","push","continue","done","exports"],"sources":["createEmptyTrashBinsTask.ts"],"sourcesContent":["import { createTaskDefinition } from \"@webiny/tasks\";\nimport { createDeleteEntry, createListDeletedEntries } from \"~/useCases\";\nimport type {\n HcmsBulkActionsContext,\n IEmptyTrashBinsInput,\n IEmptyTrashBinsOutput,\n IEmptyTrashBinsTaskParams\n} from \"~/types\";\n\nconst calculateDateTimeString = () => {\n // Retrieve the retention period from the environment variable WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS,\n // or default to 90 days if not set or set to 0.\n const retentionPeriodFromEnv = process.env[\"WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS\"];\n const retentionPeriod =\n retentionPeriodFromEnv && Number(retentionPeriodFromEnv) !== 0\n ? Number(retentionPeriodFromEnv)\n : 90;\n\n // Calculate the date-time by subtracting the retention period (in days) from the current date.\n const currentDate = new Date();\n currentDate.setDate(currentDate.getDate() - retentionPeriod);\n\n // Return the calculated date-time string in ISO 8601 format.\n return currentDate.toISOString();\n};\n\nexport const createEmptyTrashBinsTask = () => {\n return createTaskDefinition<\n HcmsBulkActionsContext,\n IEmptyTrashBinsInput,\n IEmptyTrashBinsOutput\n >({\n isPrivate: true,\n id: \"hcmsEntriesEmptyTrashBins\",\n title: \"Headless CMS - Empty all trash bins\",\n description: \"Delete all entries in the trash bin for each model in the system.\",\n maxIterations: 120,\n disableDatabaseLogs: true,\n run: async (params: IEmptyTrashBinsTaskParams) => {\n const { response, isAborted, context, input, isCloseToTimeout } = params;\n\n // Abort the task if needed.\n if (isAborted()) {\n return response.aborted();\n }\n\n // Fetch all tenants, excluding those already processed.\n const baseTenants = await context.tenancy.listTenants();\n const executedTenantIds = input.executedTenantIds || [];\n const tenants = baseTenants.filter(tenant => !executedTenantIds.includes(tenant.id));\n let shouldContinue = false; // Flag to check if task should continue.\n\n // Iterate over each tenant.\n await context.tenancy.withEachTenant(tenants, async tenant => {\n if (isCloseToTimeout()) {\n shouldContinue = true;\n return;\n }\n\n // Reloading locales for the current tenant to ensure the correct data is available before proceeding.\n await context.i18n.reloadLocales();\n\n // Fetch all locales for the tenant.\n const locales = context.i18n.getLocales();\n await context.i18n.withEachLocale(locales, async () => {\n if (isCloseToTimeout()) {\n shouldContinue = true;\n return;\n }\n\n // List all non-private models for the current locale.\n const models = await context.security.withoutAuthorization(async () =>\n (await context.cms.listModels()).filter(m => !m.isPrivate)\n );\n\n // Process each model to delete trashed entries.\n for (const model of models) {\n const list = createListDeletedEntries(context); // List trashed entries.\n const mutation = createDeleteEntry(context); // Mutation to delete entries.\n\n // Query parameters for fetching deleted entries older than a minute ago.\n const listEntriesParams = {\n where: { deletedOn_lt: calculateDateTimeString() },\n limit: 50\n };\n\n let result;\n // Continue deleting entries while there are entries left to delete.\n while (\n (result = await list.execute(model.modelId, listEntriesParams)) &&\n result.meta.totalCount > 0\n ) {\n if (isCloseToTimeout()) {\n shouldContinue = true;\n break;\n }\n for (const entry of result.entries) {\n if (isCloseToTimeout()) {\n shouldContinue = true;\n break;\n }\n // Delete each entry individually.\n await mutation.execute(model, entry.id);\n }\n }\n }\n });\n\n // If the task isn't continuing, add the tenant to the executed list.\n if (!shouldContinue) {\n executedTenantIds.push(tenant.id);\n }\n });\n\n // Continue the task or mark it as done based on the `shouldContinue` flag.\n return shouldContinue\n ? response.continue({ ...input, executedTenantIds })\n : response.done(\"Task done: emptied the trash bin for all registered models.\");\n }\n });\n};\n"],"mappings":"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","ignoreList":[]}
|
package/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { CmsContext } from "@webiny/api-headless-cms/types";
|
|
2
|
-
import { Context as BaseContext } from "@webiny/handler/types";
|
|
3
|
-
import { Context as TasksContext, ITaskResponseDoneResultOutput, ITaskRunParams } from "@webiny/tasks/types";
|
|
4
|
-
import { SecurityIdentity } from "@webiny/api-security/types";
|
|
1
|
+
import type { CmsContext } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import type { Context as BaseContext } from "@webiny/handler/types";
|
|
3
|
+
import type { Context as TasksContext, ITaskResponseDoneResultOutput, ITaskRunParams } from "@webiny/tasks/types";
|
|
4
|
+
import type { SecurityIdentity } from "@webiny/api-security/types";
|
|
5
5
|
export interface HcmsBulkActionsContext extends BaseContext, CmsContext, TasksContext {
|
|
6
6
|
}
|
|
7
7
|
/**
|
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BulkActionOperationByModelAction","exports"],"sources":["types.ts"],"sourcesContent":["import { CmsContext } from \"@webiny/api-headless-cms/types\";\nimport { Context as BaseContext } from \"@webiny/handler/types\";\nimport {\n Context as TasksContext,\n ITaskResponseDoneResultOutput,\n ITaskRunParams\n} from \"@webiny/tasks/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\n\nexport interface HcmsBulkActionsContext extends BaseContext, CmsContext, TasksContext {}\n\n/**\n * Bulk Action Operation\n */\n\nexport interface IBulkActionOperationInput {\n modelId: string;\n ids: string[];\n data?: Record<string, any>;\n identity: SecurityIdentity;\n done?: string[];\n failed?: string[];\n}\n\nexport interface IBulkActionOperationOutput extends ITaskResponseDoneResultOutput {\n done: string[];\n failed: string[];\n}\n\nexport type IBulkActionOperationTaskParams = ITaskRunParams<\n HcmsBulkActionsContext,\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n>;\n\n/**\n * Bulk Action Operation By Model\n */\n\nexport enum BulkActionOperationByModelAction {\n CREATE_SUBTASKS = \"CREATE_SUBTASKS\",\n CHECK_MORE_SUBTASKS = \"CHECK_MORE_SUBTASKS\",\n PROCESS_SUBTASKS = \"PROCESS_SUBTASKS\",\n END_TASK = \"END_TASK\"\n}\n\nexport interface IBulkActionOperationByModelInput {\n modelId: string;\n identity?: SecurityIdentity;\n where?: Record<string, any>;\n search?: string;\n after?: string | null;\n data?: Record<string, any>;\n action?: BulkActionOperationByModelAction;\n}\n\nexport interface IBulkActionOperationByModelOutput extends ITaskResponseDoneResultOutput {\n done: string[];\n failed: string[];\n}\n\nexport type IBulkActionOperationByModelTaskParams = ITaskRunParams<\n HcmsBulkActionsContext,\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput\n>;\n\n/**\n * Empty Trash Bin\n */\n\nexport interface IEmptyTrashBinsInput {\n executedTenantIds?: string[] | null;\n}\n\nexport type IEmptyTrashBinsOutput = ITaskResponseDoneResultOutput;\n\nexport type IEmptyTrashBinsTaskParams = ITaskRunParams<\n HcmsBulkActionsContext,\n IEmptyTrashBinsInput,\n IEmptyTrashBinsOutput\n>;\n"],"mappings":";;;;;;AAWA;AACA;AACA;AAsBA;AACA;AACA;AAFA,IAIYA,gCAAgC,GAAAC,OAAA,CAAAD,gCAAA,0BAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAA,OAAhCA,gCAAgC;AAAA;AA4B5C;AACA;AACA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["BulkActionOperationByModelAction","exports"],"sources":["types.ts"],"sourcesContent":["import type { CmsContext } from \"@webiny/api-headless-cms/types\";\nimport type { Context as BaseContext } from \"@webiny/handler/types\";\nimport type {\n Context as TasksContext,\n ITaskResponseDoneResultOutput,\n ITaskRunParams\n} from \"@webiny/tasks/types\";\nimport type { SecurityIdentity } from \"@webiny/api-security/types\";\n\nexport interface HcmsBulkActionsContext extends BaseContext, CmsContext, TasksContext {}\n\n/**\n * Bulk Action Operation\n */\n\nexport interface IBulkActionOperationInput {\n modelId: string;\n ids: string[];\n data?: Record<string, any>;\n identity: SecurityIdentity;\n done?: string[];\n failed?: string[];\n}\n\nexport interface IBulkActionOperationOutput extends ITaskResponseDoneResultOutput {\n done: string[];\n failed: string[];\n}\n\nexport type IBulkActionOperationTaskParams = ITaskRunParams<\n HcmsBulkActionsContext,\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n>;\n\n/**\n * Bulk Action Operation By Model\n */\n\nexport enum BulkActionOperationByModelAction {\n CREATE_SUBTASKS = \"CREATE_SUBTASKS\",\n CHECK_MORE_SUBTASKS = \"CHECK_MORE_SUBTASKS\",\n PROCESS_SUBTASKS = \"PROCESS_SUBTASKS\",\n END_TASK = \"END_TASK\"\n}\n\nexport interface IBulkActionOperationByModelInput {\n modelId: string;\n identity?: SecurityIdentity;\n where?: Record<string, any>;\n search?: string;\n after?: string | null;\n data?: Record<string, any>;\n action?: BulkActionOperationByModelAction;\n}\n\nexport interface IBulkActionOperationByModelOutput extends ITaskResponseDoneResultOutput {\n done: string[];\n failed: string[];\n}\n\nexport type IBulkActionOperationByModelTaskParams = ITaskRunParams<\n HcmsBulkActionsContext,\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput\n>;\n\n/**\n * Empty Trash Bin\n */\n\nexport interface IEmptyTrashBinsInput {\n executedTenantIds?: string[] | null;\n}\n\nexport type IEmptyTrashBinsOutput = ITaskResponseDoneResultOutput;\n\nexport type IEmptyTrashBinsTaskParams = ITaskRunParams<\n HcmsBulkActionsContext,\n IEmptyTrashBinsInput,\n IEmptyTrashBinsOutput\n>;\n"],"mappings":";;;;;;AAWA;AACA;AACA;AAsBA;AACA;AACA;AAFA,IAIYA,gCAAgC,GAAAC,OAAA,CAAAD,gCAAA,0BAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAA,OAAhCA,gCAAgC;AAAA;AA4B5C;AACA;AACA","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CmsModel } from "@webiny/api-headless-cms/types";
|
|
2
|
-
import { IProcessEntry } from "../abstractions";
|
|
3
|
-
import { HcmsBulkActionsContext } from "../types";
|
|
1
|
+
import type { CmsModel } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import type { IProcessEntry } from "../abstractions";
|
|
3
|
+
import type { HcmsBulkActionsContext } from "../types";
|
|
4
4
|
declare class DeleteEntry implements IProcessEntry {
|
|
5
5
|
private readonly context;
|
|
6
6
|
constructor(context: HcmsBulkActionsContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_utils","require","DeleteEntry","constructor","context","execute","model","id","entryId","parseIdentifier","cms","deleteEntry","permanently","createDeleteEntry","exports"],"sources":["DeleteEntry.ts"],"sourcesContent":["import { parseIdentifier } from \"@webiny/utils\";\nimport { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { IProcessEntry } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nclass DeleteEntry 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): Promise<void> {\n const { id: entryId } = parseIdentifier(id);\n await this.context.cms.deleteEntry(model, entryId, {\n permanently: true\n });\n }\n}\n\nexport const createDeleteEntry = (context: HcmsBulkActionsContext) => {\n return new DeleteEntry(context);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAKA,MAAMC,WAAW,CAA0B;EAGvCC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,KAAe,EAAEC,EAAU,EAAiB;IACtD,MAAM;MAAEA,EAAE,EAAEC;IAAQ,CAAC,GAAG,IAAAC,sBAAe,EAACF,EAAE,CAAC;IAC3C,MAAM,IAAI,CAACH,OAAO,CAACM,GAAG,CAACC,WAAW,CAACL,KAAK,EAAEE,OAAO,EAAE;MAC/CI,WAAW,EAAE;IACjB,CAAC,CAAC;EACN;AACJ;AAEO,MAAMC,iBAAiB,GAAIT,OAA+B,IAAK;EAClE,OAAO,IAAIF,WAAW,CAACE,OAAO,CAAC;AACnC,CAAC;AAACU,OAAA,CAAAD,iBAAA,GAAAA,iBAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_utils","require","DeleteEntry","constructor","context","execute","model","id","entryId","parseIdentifier","cms","deleteEntry","permanently","createDeleteEntry","exports"],"sources":["DeleteEntry.ts"],"sourcesContent":["import { parseIdentifier } from \"@webiny/utils\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport type { IProcessEntry } from \"~/abstractions\";\nimport type { HcmsBulkActionsContext } from \"~/types\";\n\nclass DeleteEntry 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): Promise<void> {\n const { id: entryId } = parseIdentifier(id);\n await this.context.cms.deleteEntry(model, entryId, {\n permanently: true\n });\n }\n}\n\nexport const createDeleteEntry = (context: HcmsBulkActionsContext) => {\n return new DeleteEntry(context);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAKA,MAAMC,WAAW,CAA0B;EAGvCC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,KAAe,EAAEC,EAAU,EAAiB;IACtD,MAAM;MAAEA,EAAE,EAAEC;IAAQ,CAAC,GAAG,IAAAC,sBAAe,EAACF,EAAE,CAAC;IAC3C,MAAM,IAAI,CAACH,OAAO,CAACM,GAAG,CAACC,WAAW,CAACL,KAAK,EAAEE,OAAO,EAAE;MAC/CI,WAAW,EAAE;IACjB,CAAC,CAAC;EACN;AACJ;AAEO,MAAMC,iBAAiB,GAAIT,OAA+B,IAAK;EAClE,OAAO,IAAIF,WAAW,CAACE,OAAO,CAAC;AACnC,CAAC;AAACU,OAAA,CAAAD,iBAAA,GAAAA,iBAAA","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CmsEntryListParams } from "@webiny/api-headless-cms/types";
|
|
2
|
-
import { IListEntries } from "../abstractions";
|
|
3
|
-
import { HcmsBulkActionsContext } from "../types";
|
|
1
|
+
import type { CmsEntryListParams } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import type { IListEntries } from "../abstractions";
|
|
3
|
+
import type { HcmsBulkActionsContext } from "../types";
|
|
4
4
|
declare class ListDeletedEntries implements IListEntries {
|
|
5
5
|
private readonly context;
|
|
6
6
|
constructor(context: HcmsBulkActionsContext);
|
|
@@ -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,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
|
+
{"version":3,"names":["ListDeletedEntries","constructor","context","execute","modelId","params","model","cms","getModel","Error","entries","meta","listDeletedEntries","createListDeletedEntries","exports"],"sources":["ListDeletedEntries.ts"],"sourcesContent":["import type { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport type { IListEntries } from \"~/abstractions\";\nimport type { 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,6 +1,6 @@
|
|
|
1
|
-
import { CmsEntryListParams } from "@webiny/api-headless-cms/types";
|
|
2
|
-
import { IListEntries } from "../abstractions";
|
|
3
|
-
import { HcmsBulkActionsContext } from "../types";
|
|
1
|
+
import type { CmsEntryListParams } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import type { IListEntries } from "../abstractions";
|
|
3
|
+
import type { HcmsBulkActionsContext } from "../types";
|
|
4
4
|
declare class ListLatestEntries implements IListEntries {
|
|
5
5
|
private readonly context;
|
|
6
6
|
constructor(context: HcmsBulkActionsContext);
|
|
@@ -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,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
|
+
{"version":3,"names":["ListLatestEntries","constructor","context","execute","modelId","params","model","cms","getModel","Error","entries","meta","listLatestEntries","createListLatestEntries","exports"],"sources":["ListLatestEntries.ts"],"sourcesContent":["import type { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport type { IListEntries } from \"~/abstractions\";\nimport type { 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,6 +1,6 @@
|
|
|
1
|
-
import { CmsEntryListParams } from "@webiny/api-headless-cms/types";
|
|
2
|
-
import { IListEntries } from "../abstractions";
|
|
3
|
-
import { HcmsBulkActionsContext } from "../types";
|
|
1
|
+
import type { CmsEntryListParams } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import type { IListEntries } from "../abstractions";
|
|
3
|
+
import type { HcmsBulkActionsContext } from "../types";
|
|
4
4
|
declare class ListNotPublishedEntries implements IListEntries {
|
|
5
5
|
private readonly context;
|
|
6
6
|
constructor(context: HcmsBulkActionsContext);
|
|
@@ -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,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
|
+
{"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 type { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport type { IListEntries } from \"~/abstractions\";\nimport type { 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,6 +1,6 @@
|
|
|
1
|
-
import { CmsEntryListParams } from "@webiny/api-headless-cms/types";
|
|
2
|
-
import { IListEntries } from "../abstractions";
|
|
3
|
-
import { HcmsBulkActionsContext } from "../types";
|
|
1
|
+
import type { CmsEntryListParams } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import type { IListEntries } from "../abstractions";
|
|
3
|
+
import type { HcmsBulkActionsContext } from "../types";
|
|
4
4
|
declare class ListPublishedEntries implements IListEntries {
|
|
5
5
|
private readonly context;
|
|
6
6
|
constructor(context: HcmsBulkActionsContext);
|
|
@@ -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,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
|
+
{"version":3,"names":["ListPublishedEntries","constructor","context","execute","modelId","params","model","cms","getModel","Error","entries","meta","listPublishedEntries","createListPublishedEntries","exports"],"sources":["ListPublishedEntries.ts"],"sourcesContent":["import type { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport type { IListEntries } from \"~/abstractions\";\nimport type { 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,6 +1,6 @@
|
|
|
1
|
-
import { CmsModel } from "@webiny/api-headless-cms/types";
|
|
2
|
-
import { IProcessEntry } from "../abstractions";
|
|
3
|
-
import { HcmsBulkActionsContext } from "../types";
|
|
1
|
+
import type { CmsModel } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import type { IProcessEntry } from "../abstractions";
|
|
3
|
+
import type { HcmsBulkActionsContext } from "../types";
|
|
4
4
|
interface MoveEntryToFolderData {
|
|
5
5
|
folderId?: string;
|
|
6
6
|
}
|
|
@@ -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,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
|
+
{"version":3,"names":["MoveEntryToFolder","constructor","context","execute","model","id","data","folderId","Error","cms","moveEntry","createMoveEntryToFolder","exports"],"sources":["MoveEntryToFolder.ts"],"sourcesContent":["import type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport type { IProcessEntry } from \"~/abstractions\";\nimport type { 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,6 +1,6 @@
|
|
|
1
|
-
import { CmsModel } from "@webiny/api-headless-cms/types";
|
|
2
|
-
import { IProcessEntry } from "../abstractions";
|
|
3
|
-
import { HcmsBulkActionsContext } from "../types";
|
|
1
|
+
import type { CmsModel } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import type { IProcessEntry } from "../abstractions";
|
|
3
|
+
import type { HcmsBulkActionsContext } from "../types";
|
|
4
4
|
declare class MoveEntryToTrash implements IProcessEntry {
|
|
5
5
|
private readonly context;
|
|
6
6
|
constructor(context: HcmsBulkActionsContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_utils","require","MoveEntryToTrash","constructor","context","execute","model","id","entryId","parseIdentifier","cms","deleteEntry","permanently","createMoveEntryToTrash","exports"],"sources":["MoveEntryToTrash.ts"],"sourcesContent":["import { parseIdentifier } from \"@webiny/utils\";\nimport { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { IProcessEntry } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nclass MoveEntryToTrash 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): Promise<void> {\n const { id: entryId } = parseIdentifier(id);\n await this.context.cms.deleteEntry(model, entryId, { permanently: false });\n }\n}\n\nexport const createMoveEntryToTrash = (context: HcmsBulkActionsContext) => {\n return new MoveEntryToTrash(context);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAKA,MAAMC,gBAAgB,CAA0B;EAG5CC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,KAAe,EAAEC,EAAU,EAAiB;IACtD,MAAM;MAAEA,EAAE,EAAEC;IAAQ,CAAC,GAAG,IAAAC,sBAAe,EAACF,EAAE,CAAC;IAC3C,MAAM,IAAI,CAACH,OAAO,CAACM,GAAG,CAACC,WAAW,CAACL,KAAK,EAAEE,OAAO,EAAE;MAAEI,WAAW,EAAE;IAAM,CAAC,CAAC;EAC9E;AACJ;AAEO,MAAMC,sBAAsB,GAAIT,OAA+B,IAAK;EACvE,OAAO,IAAIF,gBAAgB,CAACE,OAAO,CAAC;AACxC,CAAC;AAACU,OAAA,CAAAD,sBAAA,GAAAA,sBAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_utils","require","MoveEntryToTrash","constructor","context","execute","model","id","entryId","parseIdentifier","cms","deleteEntry","permanently","createMoveEntryToTrash","exports"],"sources":["MoveEntryToTrash.ts"],"sourcesContent":["import { parseIdentifier } from \"@webiny/utils\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport type { IProcessEntry } from \"~/abstractions\";\nimport type { HcmsBulkActionsContext } from \"~/types\";\n\nclass MoveEntryToTrash 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): Promise<void> {\n const { id: entryId } = parseIdentifier(id);\n await this.context.cms.deleteEntry(model, entryId, { permanently: false });\n }\n}\n\nexport const createMoveEntryToTrash = (context: HcmsBulkActionsContext) => {\n return new MoveEntryToTrash(context);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAKA,MAAMC,gBAAgB,CAA0B;EAG5CC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,KAAe,EAAEC,EAAU,EAAiB;IACtD,MAAM;MAAEA,EAAE,EAAEC;IAAQ,CAAC,GAAG,IAAAC,sBAAe,EAACF,EAAE,CAAC;IAC3C,MAAM,IAAI,CAACH,OAAO,CAACM,GAAG,CAACC,WAAW,CAACL,KAAK,EAAEE,OAAO,EAAE;MAAEI,WAAW,EAAE;IAAM,CAAC,CAAC;EAC9E;AACJ;AAEO,MAAMC,sBAAsB,GAAIT,OAA+B,IAAK;EACvE,OAAO,IAAIF,gBAAgB,CAACE,OAAO,CAAC;AACxC,CAAC;AAACU,OAAA,CAAAD,sBAAA,GAAAA,sBAAA","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CmsModel } from "@webiny/api-headless-cms/types";
|
|
2
|
-
import { IProcessEntry } from "../abstractions";
|
|
3
|
-
import { HcmsBulkActionsContext } from "../types";
|
|
1
|
+
import type { CmsModel } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import type { IProcessEntry } from "../abstractions";
|
|
3
|
+
import type { HcmsBulkActionsContext } from "../types";
|
|
4
4
|
declare class PublishEntry implements IProcessEntry {
|
|
5
5
|
private readonly context;
|
|
6
6
|
constructor(context: HcmsBulkActionsContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PublishEntry","constructor","context","execute","model","id","cms","publishEntry","createPublishEntry","exports"],"sources":["PublishEntry.ts"],"sourcesContent":["import { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { IProcessEntry } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nclass PublishEntry 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): Promise<void> {\n await this.context.cms.publishEntry(model, id);\n }\n}\n\nexport const createPublishEntry = (context: HcmsBulkActionsContext) => {\n return new PublishEntry(context);\n};\n"],"mappings":";;;;;;AAIA,MAAMA,YAAY,CAA0B;EAGxCC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,KAAe,EAAEC,EAAU,EAAiB;IACtD,MAAM,IAAI,CAACH,OAAO,CAACI,GAAG,CAACC,YAAY,CAACH,KAAK,EAAEC,EAAE,CAAC;EAClD;AACJ;AAEO,MAAMG,kBAAkB,GAAIN,OAA+B,IAAK;EACnE,OAAO,IAAIF,YAAY,CAACE,OAAO,CAAC;AACpC,CAAC;AAACO,OAAA,CAAAD,kBAAA,GAAAA,kBAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["PublishEntry","constructor","context","execute","model","id","cms","publishEntry","createPublishEntry","exports"],"sources":["PublishEntry.ts"],"sourcesContent":["import type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport type { IProcessEntry } from \"~/abstractions\";\nimport type { HcmsBulkActionsContext } from \"~/types\";\n\nclass PublishEntry 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): Promise<void> {\n await this.context.cms.publishEntry(model, id);\n }\n}\n\nexport const createPublishEntry = (context: HcmsBulkActionsContext) => {\n return new PublishEntry(context);\n};\n"],"mappings":";;;;;;AAIA,MAAMA,YAAY,CAA0B;EAGxCC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,KAAe,EAAEC,EAAU,EAAiB;IACtD,MAAM,IAAI,CAACH,OAAO,CAACI,GAAG,CAACC,YAAY,CAACH,KAAK,EAAEC,EAAE,CAAC;EAClD;AACJ;AAEO,MAAMG,kBAAkB,GAAIN,OAA+B,IAAK;EACnE,OAAO,IAAIF,YAAY,CAACE,OAAO,CAAC;AACpC,CAAC;AAACO,OAAA,CAAAD,kBAAA,GAAAA,kBAAA","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CmsModel } from "@webiny/api-headless-cms/types";
|
|
2
|
-
import { IProcessEntry } from "../abstractions";
|
|
3
|
-
import { HcmsBulkActionsContext } from "../types";
|
|
1
|
+
import type { CmsModel } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import type { IProcessEntry } from "../abstractions";
|
|
3
|
+
import type { HcmsBulkActionsContext } from "../types";
|
|
4
4
|
declare class RestoreEntryFromTrash implements IProcessEntry {
|
|
5
5
|
private readonly context;
|
|
6
6
|
constructor(context: HcmsBulkActionsContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_utils","require","RestoreEntryFromTrash","constructor","context","execute","model","id","entryId","parseIdentifier","cms","restoreEntryFromBin","createRestoreEntryFromTrash","exports"],"sources":["RestoreEntryFromTrash.ts"],"sourcesContent":["import { parseIdentifier } from \"@webiny/utils\";\nimport { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { IProcessEntry } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nclass RestoreEntryFromTrash 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): Promise<void> {\n const { id: entryId } = parseIdentifier(id);\n await this.context.cms.restoreEntryFromBin(model, entryId);\n }\n}\n\nexport const createRestoreEntryFromTrash = (context: HcmsBulkActionsContext) => {\n return new RestoreEntryFromTrash(context);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAKA,MAAMC,qBAAqB,CAA0B;EAGjDC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,KAAe,EAAEC,EAAU,EAAiB;IACtD,MAAM;MAAEA,EAAE,EAAEC;IAAQ,CAAC,GAAG,IAAAC,sBAAe,EAACF,EAAE,CAAC;IAC3C,MAAM,IAAI,CAACH,OAAO,CAACM,GAAG,CAACC,mBAAmB,CAACL,KAAK,EAAEE,OAAO,CAAC;EAC9D;AACJ;AAEO,MAAMI,2BAA2B,GAAIR,OAA+B,IAAK;EAC5E,OAAO,IAAIF,qBAAqB,CAACE,OAAO,CAAC;AAC7C,CAAC;AAACS,OAAA,CAAAD,2BAAA,GAAAA,2BAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_utils","require","RestoreEntryFromTrash","constructor","context","execute","model","id","entryId","parseIdentifier","cms","restoreEntryFromBin","createRestoreEntryFromTrash","exports"],"sources":["RestoreEntryFromTrash.ts"],"sourcesContent":["import { parseIdentifier } from \"@webiny/utils\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport type { IProcessEntry } from \"~/abstractions\";\nimport type { HcmsBulkActionsContext } from \"~/types\";\n\nclass RestoreEntryFromTrash 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): Promise<void> {\n const { id: entryId } = parseIdentifier(id);\n await this.context.cms.restoreEntryFromBin(model, entryId);\n }\n}\n\nexport const createRestoreEntryFromTrash = (context: HcmsBulkActionsContext) => {\n return new RestoreEntryFromTrash(context);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAKA,MAAMC,qBAAqB,CAA0B;EAGjDC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,KAAe,EAAEC,EAAU,EAAiB;IACtD,MAAM;MAAEA,EAAE,EAAEC;IAAQ,CAAC,GAAG,IAAAC,sBAAe,EAACF,EAAE,CAAC;IAC3C,MAAM,IAAI,CAACH,OAAO,CAACM,GAAG,CAACC,mBAAmB,CAACL,KAAK,EAAEE,OAAO,CAAC;EAC9D;AACJ;AAEO,MAAMI,2BAA2B,GAAIR,OAA+B,IAAK;EAC5E,OAAO,IAAIF,qBAAqB,CAACE,OAAO,CAAC;AAC7C,CAAC;AAACS,OAAA,CAAAD,2BAAA,GAAAA,2BAAA","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CmsModel } from "@webiny/api-headless-cms/types";
|
|
2
|
-
import { IProcessEntry } from "../abstractions";
|
|
3
|
-
import { HcmsBulkActionsContext } from "../types";
|
|
1
|
+
import type { CmsModel } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import type { IProcessEntry } from "../abstractions";
|
|
3
|
+
import type { HcmsBulkActionsContext } from "../types";
|
|
4
4
|
declare class UnpublishEntry implements IProcessEntry {
|
|
5
5
|
private readonly context;
|
|
6
6
|
constructor(context: HcmsBulkActionsContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["UnpublishEntry","constructor","context","execute","model","id","cms","unpublishEntry","createUnpublishEntry","exports"],"sources":["UnpublishEntry.ts"],"sourcesContent":["import { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { IProcessEntry } from \"~/abstractions\";\nimport { HcmsBulkActionsContext } from \"~/types\";\n\nclass UnpublishEntry 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): Promise<void> {\n await this.context.cms.unpublishEntry(model, id);\n }\n}\n\nexport const createUnpublishEntry = (context: HcmsBulkActionsContext) => {\n return new UnpublishEntry(context);\n};\n"],"mappings":";;;;;;AAIA,MAAMA,cAAc,CAA0B;EAG1CC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,KAAe,EAAEC,EAAU,EAAiB;IACtD,MAAM,IAAI,CAACH,OAAO,CAACI,GAAG,CAACC,cAAc,CAACH,KAAK,EAAEC,EAAE,CAAC;EACpD;AACJ;AAEO,MAAMG,oBAAoB,GAAIN,OAA+B,IAAK;EACrE,OAAO,IAAIF,cAAc,CAACE,OAAO,CAAC;AACtC,CAAC;AAACO,OAAA,CAAAD,oBAAA,GAAAA,oBAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["UnpublishEntry","constructor","context","execute","model","id","cms","unpublishEntry","createUnpublishEntry","exports"],"sources":["UnpublishEntry.ts"],"sourcesContent":["import type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport type { IProcessEntry } from \"~/abstractions\";\nimport type { HcmsBulkActionsContext } from \"~/types\";\n\nclass UnpublishEntry 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): Promise<void> {\n await this.context.cms.unpublishEntry(model, id);\n }\n}\n\nexport const createUnpublishEntry = (context: HcmsBulkActionsContext) => {\n return new UnpublishEntry(context);\n};\n"],"mappings":";;;;;;AAIA,MAAMA,cAAc,CAA0B;EAG1CC,WAAWA,CAACC,OAA+B,EAAE;IACzC,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,KAAe,EAAEC,EAAU,EAAiB;IACtD,MAAM,IAAI,CAACH,OAAO,CAACI,GAAG,CAACC,cAAc,CAACH,KAAK,EAAEC,EAAE,CAAC;EACpD;AACJ;AAEO,MAAMG,oBAAoB,GAAIN,OAA+B,IAAK;EACrE,OAAO,IAAIF,cAAc,CAACE,OAAO,CAAC;AACtC,CAAC;AAACO,OAAA,CAAAD,oBAAA,GAAAA,oBAAA","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ITask, Context } from "@webiny/tasks";
|
|
2
|
-
import { IUseCase } from "../../../abstractions";
|
|
1
|
+
import type { ITask, Context } from "@webiny/tasks";
|
|
2
|
+
import type { IUseCase } from "../../../abstractions";
|
|
3
3
|
export interface IChildTasksCleanupExecuteParams {
|
|
4
4
|
context: Context;
|
|
5
5
|
task: ITask;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_tasks","require","ChildTasksCleanup","execute","params","context","task","items","childTasks","tasks","listTasks","where","parentId","id","limit","length","childTaskIdList","map","childTask","childLogs","listLogs","task_in","deleteTasks","deletedChildTaskLogIdList","log","some","item","type","TaskLogItemType","ERROR","deleteLog","includes","push","taskIds","taskId","deleteTask","exports"],"sources":["ChildTasksCleanup.ts"],"sourcesContent":["import { ITask, Context
|
|
1
|
+
{"version":3,"names":["_tasks","require","ChildTasksCleanup","execute","params","context","task","items","childTasks","tasks","listTasks","where","parentId","id","limit","length","childTaskIdList","map","childTask","childLogs","listLogs","task_in","deleteTasks","deletedChildTaskLogIdList","log","some","item","type","TaskLogItemType","ERROR","deleteLog","includes","push","taskIds","taskId","deleteTask","exports"],"sources":["ChildTasksCleanup.ts"],"sourcesContent":["import type { ITask, Context } from \"@webiny/tasks\";\nimport { TaskLogItemType } from \"@webiny/tasks\";\nimport type { IUseCase } from \"~/abstractions\";\nimport type { HcmsBulkActionsContext } from \"~/types\";\n\nexport interface IChildTasksCleanupExecuteParams {\n context: Context;\n task: ITask;\n}\n\n/**\n * Cleanup of the child tasks.\n * This code will remove all the child tasks and their logs, which have no errors in them.\n */\nexport class ChildTasksCleanup implements IUseCase<IChildTasksCleanupExecuteParams, void> {\n public async execute(params: IChildTasksCleanupExecuteParams): Promise<void> {\n const { context, task } = params;\n\n const { items: childTasks } = await context.tasks.listTasks({\n where: {\n parentId: task.id\n },\n // Really doubtful there will be more than 10k of child tasks.\n limit: 10000\n });\n\n if (childTasks.length === 0) {\n return;\n }\n\n const childTaskIdList = childTasks.map(childTask => childTask.id);\n\n const { items: childLogs } = await context.tasks.listLogs({\n where: {\n task_in: childTaskIdList\n },\n limit: 10000\n });\n\n /**\n * No logs found. Proceed with deleting the child tasks.\n */\n if (childLogs.length === 0) {\n await this.deleteTasks(context, childTaskIdList);\n }\n\n const deletedChildTaskLogIdList: string[] = [];\n /**\n * First, we need to remove all the logs which have no errors.\n */\n for (const log of childLogs) {\n if (log.items.some(item => item.type === TaskLogItemType.ERROR)) {\n continue;\n }\n await context.tasks.deleteLog(log.id);\n if (deletedChildTaskLogIdList.includes(log.task)) {\n continue;\n }\n deletedChildTaskLogIdList.push(log.task);\n }\n /**\n * Now we can remove the tasks.\n */\n await this.deleteTasks(context, deletedChildTaskLogIdList);\n }\n\n /**\n * Helper method to delete tasks by ID.\n */\n private async deleteTasks(context: HcmsBulkActionsContext, taskIds: string[]): Promise<void> {\n for (const taskId of taskIds) {\n await context.tasks.deleteTask(taskId);\n }\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AASA;AACA;AACA;AACA;AACO,MAAMC,iBAAiB,CAA4D;EACtF,MAAaC,OAAOA,CAACC,MAAuC,EAAiB;IACzE,MAAM;MAAEC,OAAO;MAAEC;IAAK,CAAC,GAAGF,MAAM;IAEhC,MAAM;MAAEG,KAAK,EAAEC;IAAW,CAAC,GAAG,MAAMH,OAAO,CAACI,KAAK,CAACC,SAAS,CAAC;MACxDC,KAAK,EAAE;QACHC,QAAQ,EAAEN,IAAI,CAACO;MACnB,CAAC;MACD;MACAC,KAAK,EAAE;IACX,CAAC,CAAC;IAEF,IAAIN,UAAU,CAACO,MAAM,KAAK,CAAC,EAAE;MACzB;IACJ;IAEA,MAAMC,eAAe,GAAGR,UAAU,CAACS,GAAG,CAACC,SAAS,IAAIA,SAAS,CAACL,EAAE,CAAC;IAEjE,MAAM;MAAEN,KAAK,EAAEY;IAAU,CAAC,GAAG,MAAMd,OAAO,CAACI,KAAK,CAACW,QAAQ,CAAC;MACtDT,KAAK,EAAE;QACHU,OAAO,EAAEL;MACb,CAAC;MACDF,KAAK,EAAE;IACX,CAAC,CAAC;;IAEF;AACR;AACA;IACQ,IAAIK,SAAS,CAACJ,MAAM,KAAK,CAAC,EAAE;MACxB,MAAM,IAAI,CAACO,WAAW,CAACjB,OAAO,EAAEW,eAAe,CAAC;IACpD;IAEA,MAAMO,yBAAmC,GAAG,EAAE;IAC9C;AACR;AACA;IACQ,KAAK,MAAMC,GAAG,IAAIL,SAAS,EAAE;MACzB,IAAIK,GAAG,CAACjB,KAAK,CAACkB,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACC,IAAI,KAAKC,sBAAe,CAACC,KAAK,CAAC,EAAE;QAC7D;MACJ;MACA,MAAMxB,OAAO,CAACI,KAAK,CAACqB,SAAS,CAACN,GAAG,CAACX,EAAE,CAAC;MACrC,IAAIU,yBAAyB,CAACQ,QAAQ,CAACP,GAAG,CAAClB,IAAI,CAAC,EAAE;QAC9C;MACJ;MACAiB,yBAAyB,CAACS,IAAI,CAACR,GAAG,CAAClB,IAAI,CAAC;IAC5C;IACA;AACR;AACA;IACQ,MAAM,IAAI,CAACgB,WAAW,CAACjB,OAAO,EAAEkB,yBAAyB,CAAC;EAC9D;;EAEA;AACJ;AACA;EACI,MAAcD,WAAWA,CAACjB,OAA+B,EAAE4B,OAAiB,EAAiB;IACzF,KAAK,MAAMC,MAAM,IAAID,OAAO,EAAE;MAC1B,MAAM5B,OAAO,CAACI,KAAK,CAAC0B,UAAU,CAACD,MAAM,CAAC;IAC1C;EACJ;AACJ;AAACE,OAAA,CAAAlC,iBAAA,GAAAA,iBAAA","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ITaskResponseResult } from "@webiny/tasks";
|
|
2
|
-
import { IListEntries } from "../../../abstractions";
|
|
3
|
-
import { IBulkActionOperationByModelTaskParams } from "../../../types";
|
|
1
|
+
import type { ITaskResponseResult } from "@webiny/tasks";
|
|
2
|
+
import type { IListEntries } from "../../../abstractions";
|
|
3
|
+
import type { IBulkActionOperationByModelTaskParams } from "../../../types";
|
|
4
4
|
/**
|
|
5
5
|
* The `CreateTasksByModel` class handles the execution of a task to process entries in batches.
|
|
6
6
|
*/
|
|
@@ -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 {
|
|
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 type { ITaskResponseResult } from \"@webiny/tasks\";\nimport { TaskCache } from \"./TaskCache\";\nimport type { CmsEntryListParams } from \"@webiny/api-headless-cms/types\";\nimport type { IListEntries } from \"~/abstractions\";\nimport type { IBulkActionOperationByModelTaskParams } from \"~/types\";\nimport { BulkActionOperationByModelAction } 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,5 +1,5 @@
|
|
|
1
|
-
import { HcmsBulkActionsContext } from "../../../types";
|
|
2
|
-
import { ITask, ITaskDataInput } from "@webiny/tasks";
|
|
1
|
+
import type { HcmsBulkActionsContext } from "../../../types";
|
|
2
|
+
import type { ITask, ITaskDataInput } from "@webiny/tasks";
|
|
3
3
|
/**
|
|
4
4
|
* TaskCache class for managing and triggering cached tasks.
|
|
5
5
|
* @template TTask - Task input data.
|
|
@@ -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,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
|
+
{"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 type { HcmsBulkActionsContext } from \"~/types\";\nimport type { 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,5 +1,5 @@
|
|
|
1
|
-
import { IBulkActionOperationTaskParams } from "../../../types";
|
|
2
|
-
import { IProcessEntry } from "../../../abstractions";
|
|
1
|
+
import type { IBulkActionOperationTaskParams } from "../../../types";
|
|
2
|
+
import type { IProcessEntry } from "../../../abstractions";
|
|
3
3
|
/**
|
|
4
4
|
* The `ProcessTask` class is responsible for processing a batch of entries
|
|
5
5
|
* based on the provided parameters. It uses a gateway to perform the actual
|
|
@@ -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,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
|
+
{"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 type { IBulkActionOperationTaskParams } from \"~/types\";\nimport type { 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,4 +1,4 @@
|
|
|
1
|
-
import { IBulkActionOperationByModelTaskParams } from "../../../types";
|
|
1
|
+
import type { IBulkActionOperationByModelTaskParams } from "../../../types";
|
|
2
2
|
/**
|
|
3
3
|
* The `ProcessTasksByModel` class is responsible for processing tasks for a specific model.
|
|
4
4
|
* It checks for any running or pending tasks from the parent task and continues or completes
|
|
@@ -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 {
|
|
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 type { IBulkActionOperationByModelTaskParams } from \"~/types\";\nimport { BulkActionOperationByModelAction } 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;AAEA,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":[]}
|