payload 3.32.0-canary.3 → 3.32.0-internal.30bda70

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.
@@ -1 +1 @@
1
- {"version":3,"file":"defaultUpdateJobs.d.ts","sourceRoot":"","sources":["../../src/database/defaultUpdateJobs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAK5C,eAAO,MAAM,iBAAiB,EAAE,UA8C/B,CAAA"}
1
+ {"version":3,"file":"defaultUpdateJobs.d.ts","sourceRoot":"","sources":["../../src/database/defaultUpdateJobs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAI5C,eAAO,MAAM,iBAAiB,EAAE,UA8C/B,CAAA"}
@@ -1,5 +1,4 @@
1
1
  import { jobsCollectionSlug } from '../queues/config/index.js';
2
- import { sanitizeUpdateData } from '../queues/utilities/sanitizeUpdateData.js';
3
2
  export const defaultUpdateJobs = async function updateMany({ id, data, limit, req, returning, where }) {
4
3
  const updatedJobs = [];
5
4
  const jobsToUpdate = (id ? [
@@ -30,9 +29,7 @@ export const defaultUpdateJobs = async function updateMany({ id, data, limit, re
30
29
  const updatedJob = await this.updateOne({
31
30
  id: job.id,
32
31
  collection: jobsCollectionSlug,
33
- data: sanitizeUpdateData({
34
- data: updateData
35
- }),
32
+ data: updateData,
36
33
  req,
37
34
  returning
38
35
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/database/defaultUpdateJobs.ts"],"sourcesContent":["import type { BaseJob, DatabaseAdapter } from '../index.js'\nimport type { UpdateJobs } from './types.js'\n\nimport { jobsCollectionSlug } from '../queues/config/index.js'\nimport { sanitizeUpdateData } from '../queues/utilities/sanitizeUpdateData.js'\n\nexport const defaultUpdateJobs: UpdateJobs = async function updateMany(\n this: DatabaseAdapter,\n { id, data, limit, req, returning, where },\n) {\n const updatedJobs: BaseJob[] | null = []\n\n const jobsToUpdate: BaseJob[] = (\n id\n ? [\n await this.findOne({\n collection: jobsCollectionSlug,\n req,\n where: { id: { equals: id } },\n }),\n ]\n : (\n await this.find({\n collection: jobsCollectionSlug,\n limit,\n pagination: false,\n req,\n where,\n })\n ).docs\n ).filter(Boolean) as BaseJob[]\n\n if (!jobsToUpdate) {\n return null\n }\n\n for (const job of jobsToUpdate) {\n const updateData = {\n ...job,\n ...data,\n }\n const updatedJob = await this.updateOne({\n id: job.id,\n collection: jobsCollectionSlug,\n data: sanitizeUpdateData({ data: updateData }),\n req,\n returning,\n })\n updatedJobs.push(updatedJob)\n }\n\n return updatedJobs\n}\n"],"names":["jobsCollectionSlug","sanitizeUpdateData","defaultUpdateJobs","updateMany","id","data","limit","req","returning","where","updatedJobs","jobsToUpdate","findOne","collection","equals","find","pagination","docs","filter","Boolean","job","updateData","updatedJob","updateOne","push"],"mappings":"AAGA,SAASA,kBAAkB,QAAQ,4BAA2B;AAC9D,SAASC,kBAAkB,QAAQ,4CAA2C;AAE9E,OAAO,MAAMC,oBAAgC,eAAeC,WAE1D,EAAEC,EAAE,EAAEC,IAAI,EAAEC,KAAK,EAAEC,GAAG,EAAEC,SAAS,EAAEC,KAAK,EAAE;IAE1C,MAAMC,cAAgC,EAAE;IAExC,MAAMC,eAA0B,AAC9BP,CAAAA,KACI;QACE,MAAM,IAAI,CAACQ,OAAO,CAAC;YACjBC,YAAYb;YACZO;YACAE,OAAO;gBAAEL,IAAI;oBAAEU,QAAQV;gBAAG;YAAE;QAC9B;KACD,GACD,AACE,CAAA,MAAM,IAAI,CAACW,IAAI,CAAC;QACdF,YAAYb;QACZM;QACAU,YAAY;QACZT;QACAE;IACF,EAAC,EACDQ,IAAI,AAAD,EACTC,MAAM,CAACC;IAET,IAAI,CAACR,cAAc;QACjB,OAAO;IACT;IAEA,KAAK,MAAMS,OAAOT,aAAc;QAC9B,MAAMU,aAAa;YACjB,GAAGD,GAAG;YACN,GAAGf,IAAI;QACT;QACA,MAAMiB,aAAa,MAAM,IAAI,CAACC,SAAS,CAAC;YACtCnB,IAAIgB,IAAIhB,EAAE;YACVS,YAAYb;YACZK,MAAMJ,mBAAmB;gBAAEI,MAAMgB;YAAW;YAC5Cd;YACAC;QACF;QACAE,YAAYc,IAAI,CAACF;IACnB;IAEA,OAAOZ;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/database/defaultUpdateJobs.ts"],"sourcesContent":["import type { BaseJob, DatabaseAdapter } from '../index.js'\nimport type { UpdateJobs } from './types.js'\n\nimport { jobsCollectionSlug } from '../queues/config/index.js'\n\nexport const defaultUpdateJobs: UpdateJobs = async function updateMany(\n this: DatabaseAdapter,\n { id, data, limit, req, returning, where },\n) {\n const updatedJobs: BaseJob[] | null = []\n\n const jobsToUpdate: BaseJob[] = (\n id\n ? [\n await this.findOne({\n collection: jobsCollectionSlug,\n req,\n where: { id: { equals: id } },\n }),\n ]\n : (\n await this.find({\n collection: jobsCollectionSlug,\n limit,\n pagination: false,\n req,\n where,\n })\n ).docs\n ).filter(Boolean) as BaseJob[]\n\n if (!jobsToUpdate) {\n return null\n }\n\n for (const job of jobsToUpdate) {\n const updateData = {\n ...job,\n ...data,\n }\n const updatedJob = await this.updateOne({\n id: job.id,\n collection: jobsCollectionSlug,\n data: updateData,\n req,\n returning,\n })\n updatedJobs.push(updatedJob)\n }\n\n return updatedJobs\n}\n"],"names":["jobsCollectionSlug","defaultUpdateJobs","updateMany","id","data","limit","req","returning","where","updatedJobs","jobsToUpdate","findOne","collection","equals","find","pagination","docs","filter","Boolean","job","updateData","updatedJob","updateOne","push"],"mappings":"AAGA,SAASA,kBAAkB,QAAQ,4BAA2B;AAE9D,OAAO,MAAMC,oBAAgC,eAAeC,WAE1D,EAAEC,EAAE,EAAEC,IAAI,EAAEC,KAAK,EAAEC,GAAG,EAAEC,SAAS,EAAEC,KAAK,EAAE;IAE1C,MAAMC,cAAgC,EAAE;IAExC,MAAMC,eAA0B,AAC9BP,CAAAA,KACI;QACE,MAAM,IAAI,CAACQ,OAAO,CAAC;YACjBC,YAAYZ;YACZM;YACAE,OAAO;gBAAEL,IAAI;oBAAEU,QAAQV;gBAAG;YAAE;QAC9B;KACD,GACD,AACE,CAAA,MAAM,IAAI,CAACW,IAAI,CAAC;QACdF,YAAYZ;QACZK;QACAU,YAAY;QACZT;QACAE;IACF,EAAC,EACDQ,IAAI,AAAD,EACTC,MAAM,CAACC;IAET,IAAI,CAACR,cAAc;QACjB,OAAO;IACT;IAEA,KAAK,MAAMS,OAAOT,aAAc;QAC9B,MAAMU,aAAa;YACjB,GAAGD,GAAG;YACN,GAAGf,IAAI;QACT;QACA,MAAMiB,aAAa,MAAM,IAAI,CAACC,SAAS,CAAC;YACtCnB,IAAIgB,IAAIhB,EAAE;YACVS,YAAYZ;YACZI,MAAMgB;YACNd;YACAC;QACF;QACAE,YAAYc,IAAI,CAACF;IACnB;IAEA,OAAOZ;AACT,EAAC"}
@@ -10,7 +10,7 @@ export type JobLog = {
10
10
  /**
11
11
  * ID added by the array field when the log is saved in the database
12
12
  */
13
- id?: string;
13
+ id: string;
14
14
  input?: Record<string, any>;
15
15
  output?: Record<string, any>;
16
16
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"workflowTypes.d.ts","sourceRoot":"","sources":["../../../../src/queues/config/types/workflowTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflowTypes.d.ts","sourceRoot":"","sources":["../../../../src/queues/config/types/workflowTypes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/queues/config/types/workflowTypes.ts"],"sourcesContent":["import type { Field } from '../../../fields/config/types.js'\nimport type { PayloadRequest, StringKeyOf, TypedCollection, TypedJobs } from '../../../index.js'\nimport type { TaskParent } from '../../operations/runJobs/runJob/getRunTaskFunction.js'\nimport type {\n RetryConfig,\n RunInlineTaskFunction,\n RunTaskFunctions,\n TaskInput,\n TaskOutput,\n TaskType,\n} from './taskTypes.js'\nimport type { WorkflowJSON } from './workflowJSONTypes.js'\n\nexport type JobLog = {\n completedAt: string\n error?: unknown\n executedAt: string\n /**\n * ID added by the array field when the log is saved in the database\n */\n id?: string\n input?: Record<string, any>\n output?: Record<string, any>\n /**\n * Sub-tasks (tasks that are run within a task) will have a parent task ID\n */\n parent?: TaskParent\n state: 'failed' | 'succeeded'\n taskID: string\n taskSlug: string\n}\n\nexport type BaseJob = {\n completedAt?: string\n error?: unknown\n hasError?: boolean\n id: number | string\n input?: any\n log: JobLog[]\n processing?: boolean\n queue: string\n taskSlug?: string\n taskStatus?: JobTaskStatus\n totalTried: number\n waitUntil?: string\n workflowSlug?: string\n}\n\nexport type WorkflowTypes = StringKeyOf<TypedJobs['workflows']>\n\n// TODO: Type job.taskStatus once available - for JSON-defined workflows\nexport type RunningJob<TWorkflowSlugOrInput extends keyof TypedJobs['workflows'] | object> = {\n input: TWorkflowSlugOrInput extends keyof TypedJobs['workflows']\n ? TypedJobs['workflows'][TWorkflowSlugOrInput]['input']\n : TWorkflowSlugOrInput\n taskStatus: JobTaskStatus\n} & Omit<TypedCollection['payload-jobs'], 'input' | 'taskStatus'>\n\nexport type RunningJobSimple<TWorkflowInput extends object> = {\n input: TWorkflowInput\n} & TypedCollection['payload-jobs']\n\n// Simplified version of RunningJob that doesn't break TypeScript (TypeScript seems to stop evaluating RunningJob when it's too complex)\nexport type RunningJobFromTask<TTaskSlug extends keyof TypedJobs['tasks']> = {\n input: TypedJobs['tasks'][TTaskSlug]['input']\n} & TypedCollection['payload-jobs']\n\nexport type WorkflowHandler<TWorkflowSlugOrInput extends keyof TypedJobs['workflows'] | object> =\n (args: {\n inlineTask: RunInlineTaskFunction\n job: RunningJob<TWorkflowSlugOrInput>\n req: PayloadRequest\n tasks: RunTaskFunctions\n }) => Promise<void>\n\nexport type SingleTaskStatus<T extends keyof TypedJobs['tasks']> = {\n complete: boolean\n input: TaskInput<T>\n output: TaskOutput<T>\n taskSlug: TaskType\n totalTried: number\n}\n\n/**\n * Task IDs mapped to their status\n */\nexport type JobTaskStatus = {\n // Wrap in taskSlug to improve typing\n [taskSlug in TaskType]: {\n [taskID: string]: SingleTaskStatus<taskSlug>\n }\n}\n\nexport type WorkflowConfig<TWorkflowSlugOrInput extends keyof TypedJobs['workflows'] | object> = {\n /**\n * You can either pass a string-based path to the workflow function file, or the workflow function itself.\n *\n * If you are using large dependencies within your workflow control flow, you might prefer to pass the string path\n * because that will avoid bundling large dependencies in your Next.js app. Passing a string path is an advanced feature\n * that may require a sophisticated build pipeline in order to work.\n */\n handler:\n | string\n | WorkflowHandler<TWorkflowSlugOrInput>\n | WorkflowJSON<TWorkflowSlugOrInput extends object ? string : TWorkflowSlugOrInput>\n /**\n * Define the input field schema - payload will generate a type for this schema.\n */\n inputSchema?: Field[]\n /**\n * You can use interfaceName to change the name of the interface that is generated for this workflow. By default, this is \"Workflow\" + the capitalized workflow slug.\n */\n interfaceName?: string\n /**\n * Define a human-friendly label for this workflow.\n */\n label?: string\n /**\n * Optionally, define the default queue name that this workflow should be tied to.\n * Defaults to \"default\".\n * Can be overridden when queuing jobs via Local API.\n */\n queue?: string\n /**\n * You can define `retries` on the workflow level, which will enforce that the workflow can only fail up to that number of retries. If a task does not have retries specified, it will inherit the retry count as specified on the workflow.\n *\n * You can specify `0` as `workflow` retries, which will disregard all `task` retry specifications and fail the entire workflow on any task failure.\n * You can leave `workflow` retries as undefined, in which case, the workflow will respect what each task dictates as their own retry count.\n *\n * @default undefined. By default, workflows retries are defined by their tasks\n */\n retries?: number | RetryConfig | undefined\n /**\n * Define a slug-based name for this job.\n */\n slug: TWorkflowSlugOrInput extends keyof TypedJobs['workflows'] ? TWorkflowSlugOrInput : string\n}\n\ntype AllWorkflowConfigs = {\n [TWorkflowSlug in keyof TypedJobs['workflows']]: WorkflowConfig<TWorkflowSlug>\n}[keyof TypedJobs['workflows']]\n"],"names":[],"mappings":"AA6FA,WA2CC"}
1
+ {"version":3,"sources":["../../../../src/queues/config/types/workflowTypes.ts"],"sourcesContent":["import type { Field } from '../../../fields/config/types.js'\nimport type { PayloadRequest, StringKeyOf, TypedCollection, TypedJobs } from '../../../index.js'\nimport type { TaskParent } from '../../operations/runJobs/runJob/getRunTaskFunction.js'\nimport type {\n RetryConfig,\n RunInlineTaskFunction,\n RunTaskFunctions,\n TaskInput,\n TaskOutput,\n TaskType,\n} from './taskTypes.js'\nimport type { WorkflowJSON } from './workflowJSONTypes.js'\n\nexport type JobLog = {\n completedAt: string\n error?: unknown\n executedAt: string\n /**\n * ID added by the array field when the log is saved in the database\n */\n id: string\n input?: Record<string, any>\n output?: Record<string, any>\n /**\n * Sub-tasks (tasks that are run within a task) will have a parent task ID\n */\n parent?: TaskParent\n state: 'failed' | 'succeeded'\n taskID: string\n taskSlug: string\n}\n\nexport type BaseJob = {\n completedAt?: string\n error?: unknown\n hasError?: boolean\n id: number | string\n input?: any\n log: JobLog[]\n processing?: boolean\n queue: string\n taskSlug?: string\n taskStatus?: JobTaskStatus\n totalTried: number\n waitUntil?: string\n workflowSlug?: string\n}\n\nexport type WorkflowTypes = StringKeyOf<TypedJobs['workflows']>\n\n// TODO: Type job.taskStatus once available - for JSON-defined workflows\nexport type RunningJob<TWorkflowSlugOrInput extends keyof TypedJobs['workflows'] | object> = {\n input: TWorkflowSlugOrInput extends keyof TypedJobs['workflows']\n ? TypedJobs['workflows'][TWorkflowSlugOrInput]['input']\n : TWorkflowSlugOrInput\n taskStatus: JobTaskStatus\n} & Omit<TypedCollection['payload-jobs'], 'input' | 'taskStatus'>\n\nexport type RunningJobSimple<TWorkflowInput extends object> = {\n input: TWorkflowInput\n} & TypedCollection['payload-jobs']\n\n// Simplified version of RunningJob that doesn't break TypeScript (TypeScript seems to stop evaluating RunningJob when it's too complex)\nexport type RunningJobFromTask<TTaskSlug extends keyof TypedJobs['tasks']> = {\n input: TypedJobs['tasks'][TTaskSlug]['input']\n} & TypedCollection['payload-jobs']\n\nexport type WorkflowHandler<TWorkflowSlugOrInput extends keyof TypedJobs['workflows'] | object> =\n (args: {\n inlineTask: RunInlineTaskFunction\n job: RunningJob<TWorkflowSlugOrInput>\n req: PayloadRequest\n tasks: RunTaskFunctions\n }) => Promise<void>\n\nexport type SingleTaskStatus<T extends keyof TypedJobs['tasks']> = {\n complete: boolean\n input: TaskInput<T>\n output: TaskOutput<T>\n taskSlug: TaskType\n totalTried: number\n}\n\n/**\n * Task IDs mapped to their status\n */\nexport type JobTaskStatus = {\n // Wrap in taskSlug to improve typing\n [taskSlug in TaskType]: {\n [taskID: string]: SingleTaskStatus<taskSlug>\n }\n}\n\nexport type WorkflowConfig<TWorkflowSlugOrInput extends keyof TypedJobs['workflows'] | object> = {\n /**\n * You can either pass a string-based path to the workflow function file, or the workflow function itself.\n *\n * If you are using large dependencies within your workflow control flow, you might prefer to pass the string path\n * because that will avoid bundling large dependencies in your Next.js app. Passing a string path is an advanced feature\n * that may require a sophisticated build pipeline in order to work.\n */\n handler:\n | string\n | WorkflowHandler<TWorkflowSlugOrInput>\n | WorkflowJSON<TWorkflowSlugOrInput extends object ? string : TWorkflowSlugOrInput>\n /**\n * Define the input field schema - payload will generate a type for this schema.\n */\n inputSchema?: Field[]\n /**\n * You can use interfaceName to change the name of the interface that is generated for this workflow. By default, this is \"Workflow\" + the capitalized workflow slug.\n */\n interfaceName?: string\n /**\n * Define a human-friendly label for this workflow.\n */\n label?: string\n /**\n * Optionally, define the default queue name that this workflow should be tied to.\n * Defaults to \"default\".\n * Can be overridden when queuing jobs via Local API.\n */\n queue?: string\n /**\n * You can define `retries` on the workflow level, which will enforce that the workflow can only fail up to that number of retries. If a task does not have retries specified, it will inherit the retry count as specified on the workflow.\n *\n * You can specify `0` as `workflow` retries, which will disregard all `task` retry specifications and fail the entire workflow on any task failure.\n * You can leave `workflow` retries as undefined, in which case, the workflow will respect what each task dictates as their own retry count.\n *\n * @default undefined. By default, workflows retries are defined by their tasks\n */\n retries?: number | RetryConfig | undefined\n /**\n * Define a slug-based name for this job.\n */\n slug: TWorkflowSlugOrInput extends keyof TypedJobs['workflows'] ? TWorkflowSlugOrInput : string\n}\n\ntype AllWorkflowConfigs = {\n [TWorkflowSlug in keyof TypedJobs['workflows']]: WorkflowConfig<TWorkflowSlug>\n}[keyof TypedJobs['workflows']]\n"],"names":[],"mappings":"AA6FA,WA2CC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getRunTaskFunction.d.ts","sourceRoot":"","sources":["../../../../../src/queues/operations/runJobs/runJob/getRunTaskFunction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EAErB,gBAAgB,EAChB,UAAU,EAEV,iBAAiB,EAElB,MAAM,oCAAoC,CAAA;AAC3C,OAAO,KAAK,EACV,OAAO,EAEP,gBAAgB,EAChB,cAAc,EAEf,MAAM,wCAAwC,CAAA;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAMlE,MAAM,MAAM,oBAAoB,GAAG;IACjC,iBAAiB,EAAE,OAAO,CAAA;CAC3B,CAAA;AAaD,wBAAsB,gBAAgB,CAAC,EACrC,KAAK,EACL,UAAU,EACV,KAAK,EACL,GAAG,EACH,UAAU,EACV,MAAM,EACN,MAAM,EACN,GAAG,EACH,aAAa,EACb,KAAK,EACL,UAAU,EACV,iBAAiB,EACjB,MAAM,EACN,QAAQ,EACR,UAAU,EACV,SAAS,GACV,EAAE;IACD,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,UAAU,EAAE,IAAI,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,OAAO,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,GAAG,EAAE,cAAc,CAAA;IACnB,aAAa,EAAE,MAAM,GAAG,WAAW,CAAA;IACnC,KAAK,EAAE,oBAAoB,CAAA;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IAC/B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC3C,SAAS,EAAE,iBAAiB,CAAA;CAC7B,GAAG,OAAO,CAAC,KAAK,CAAC,CA6EjB;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,SAAS,SAAS,OAAO,SACnD,oBAAoB,OACtB,OAAO,kBACI,cAAc,CAAC,MAAM,CAAC,OACjC,cAAc,YACT,SAAS,aACR,iBAAiB,WACnB,UAAU,KAClB,SAAS,SAAS,IAAI,GAAG,qBAAqB,GAAG,gBAoNnD,CAAA"}
1
+ {"version":3,"file":"getRunTaskFunction.d.ts","sourceRoot":"","sources":["../../../../../src/queues/operations/runJobs/runJob/getRunTaskFunction.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EAErB,gBAAgB,EAChB,UAAU,EAEV,iBAAiB,EAElB,MAAM,oCAAoC,CAAA;AAC3C,OAAO,KAAK,EACV,OAAO,EAEP,gBAAgB,EAChB,cAAc,EAEf,MAAM,wCAAwC,CAAA;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AASlE,MAAM,MAAM,oBAAoB,GAAG;IACjC,iBAAiB,EAAE,OAAO,CAAA;CAC3B,CAAA;AAaD,wBAAsB,gBAAgB,CAAC,EACrC,KAAK,EACL,UAAU,EACV,KAAK,EACL,GAAG,EACH,UAAU,EACV,MAAM,EACN,MAAM,EACN,GAAG,EACH,aAAa,EACb,KAAK,EACL,UAAU,EACV,iBAAiB,EACjB,MAAM,EACN,QAAQ,EACR,UAAU,EACV,SAAS,GACV,EAAE;IACD,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,UAAU,EAAE,IAAI,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,OAAO,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,GAAG,EAAE,cAAc,CAAA;IACnB,aAAa,EAAE,MAAM,GAAG,WAAW,CAAA;IACnC,KAAK,EAAE,oBAAoB,CAAA;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IAC/B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC3C,SAAS,EAAE,iBAAiB,CAAA;CAC7B,GAAG,OAAO,CAAC,KAAK,CAAC,CA8EjB;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,SAAS,SAAS,OAAO,SACnD,oBAAoB,OACtB,OAAO,kBACI,cAAc,CAAC,MAAM,CAAC,OACjC,cAAc,YACT,SAAS,aACR,iBAAiB,WACnB,UAAU,KAClB,SAAS,SAAS,IAAI,GAAG,qBAAqB,GAAG,gBAsNnD,CAAA"}
@@ -1,6 +1,7 @@
1
- // @ts-strict-ignore
1
+ import ObjectIdImport from 'bson-objectid';
2
2
  import { calculateBackoffWaitUntil } from './calculateBackoffWaitUntil.js';
3
3
  import { importHandlerPath } from './importHandlerPath.js';
4
+ const ObjectId = ObjectIdImport.default || ObjectIdImport;
4
5
  async function getTaskHandlerFromConfig(taskConfig) {
5
6
  let handler;
6
7
  if (typeof taskConfig.handler === 'function') {
@@ -31,6 +32,7 @@ export async function handleTaskFailed({ error, executedAt, input, job, maxRetri
31
32
  message: taskHandlerResult.state === 'failed' ? taskHandlerResult.errorMessage ?? taskHandlerResult.state : 'failed'
32
33
  };
33
34
  job.log.push({
35
+ id: new ObjectId().toHexString(),
34
36
  completedAt: new Date().toISOString(),
35
37
  error: errorJSON,
36
38
  executedAt: executedAt.toISOString(),
@@ -139,6 +141,7 @@ export const getRunTaskFunction = (state, job, workflowConfig, req, isInline, up
139
141
  log: [
140
142
  ...job.log,
141
143
  {
144
+ id: new ObjectId().toHexString(),
142
145
  completedAt: new Date().toISOString(),
143
146
  error: errorMessage,
144
147
  executedAt: executedAt.toISOString(),
@@ -226,6 +229,7 @@ export const getRunTaskFunction = (state, job, workflowConfig, req, isInline, up
226
229
  job.log = [];
227
230
  }
228
231
  job.log.push({
232
+ id: new ObjectId().toHexString(),
229
233
  completedAt: new Date().toISOString(),
230
234
  executedAt: executedAt.toISOString(),
231
235
  input,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/queues/operations/runJobs/runJob/getRunTaskFunction.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { PayloadRequest } from '../../../../types/index.js'\nimport type {\n RetryConfig,\n RunInlineTaskFunction,\n RunTaskFunction,\n RunTaskFunctions,\n TaskConfig,\n TaskHandler,\n TaskHandlerResult,\n TaskType,\n} from '../../../config/types/taskTypes.js'\nimport type {\n BaseJob,\n RunningJob,\n SingleTaskStatus,\n WorkflowConfig,\n WorkflowTypes,\n} from '../../../config/types/workflowTypes.js'\nimport type { UpdateJobFunction } from './getUpdateJobFunction.js'\n\nimport { calculateBackoffWaitUntil } from './calculateBackoffWaitUntil.js'\nimport { importHandlerPath } from './importHandlerPath.js'\n\n// Helper object type to force being passed by reference\nexport type RunTaskFunctionState = {\n reachedMaxRetries: boolean\n}\n\nasync function getTaskHandlerFromConfig(taskConfig: TaskConfig<string>) {\n let handler: TaskHandler<TaskType>\n\n if (typeof taskConfig.handler === 'function') {\n handler = taskConfig.handler\n } else {\n handler = await importHandlerPath<TaskHandler<TaskType>>(taskConfig.handler)\n }\n return handler\n}\n\nexport async function handleTaskFailed({\n error,\n executedAt,\n input,\n job,\n maxRetries,\n output,\n parent,\n req,\n retriesConfig,\n state,\n taskConfig,\n taskHandlerResult,\n taskID,\n taskSlug,\n taskStatus,\n updateJob,\n}: {\n error?: Error\n executedAt: Date\n input: object\n job: BaseJob\n maxRetries: number\n output: object\n parent?: TaskParent\n req: PayloadRequest\n retriesConfig: number | RetryConfig\n state: RunTaskFunctionState\n taskConfig?: TaskConfig<string>\n taskHandlerResult?: TaskHandlerResult<string>\n taskID: string\n taskSlug: string\n taskStatus: null | SingleTaskStatus<string>\n updateJob: UpdateJobFunction\n}): Promise<never> {\n req.payload.logger.error({ err: error, job, msg: `Error running task ${taskID}`, taskSlug })\n\n if (taskConfig?.onFail) {\n await taskConfig.onFail()\n }\n\n if (!job.log) {\n job.log = []\n }\n const errorJSON = error\n ? {\n name: error.name,\n message: error.message,\n stack: error.stack,\n }\n : {\n message:\n taskHandlerResult.state === 'failed'\n ? (taskHandlerResult.errorMessage ?? taskHandlerResult.state)\n : 'failed',\n }\n\n job.log.push({\n completedAt: new Date().toISOString(),\n error: errorJSON,\n executedAt: executedAt.toISOString(),\n input,\n output,\n parent: req?.payload?.config?.jobs?.addParentToTaskLog ? parent : undefined,\n state: 'failed',\n taskID,\n taskSlug,\n })\n\n if (job.waitUntil) {\n // Check if waitUntil is in the past\n const waitUntil = new Date(job.waitUntil)\n if (waitUntil < new Date()) {\n // Outdated waitUntil, remove it\n delete job.waitUntil\n }\n }\n\n if (!taskStatus?.complete && (taskStatus?.totalTried ?? 0) >= maxRetries) {\n state.reachedMaxRetries = true\n\n await updateJob({\n error,\n hasError: true,\n log: job.log,\n processing: false,\n waitUntil: job.waitUntil,\n })\n\n throw new Error(\n `Task ${taskSlug} has failed more than the allowed retries in workflow ${job.workflowSlug}${error ? `. Error: ${String(error)}` : ''}`,\n )\n } else {\n // Job will retry. Let's determine when!\n const waitUntil: Date = calculateBackoffWaitUntil({\n retriesConfig,\n totalTried: taskStatus?.totalTried ?? 0,\n })\n\n // Update job's waitUntil only if this waitUntil is later than the current one\n if (!job.waitUntil || waitUntil > new Date(job.waitUntil)) {\n job.waitUntil = waitUntil.toISOString()\n }\n\n await updateJob({\n log: job.log,\n processing: false,\n waitUntil: job.waitUntil,\n })\n throw error ?? new Error('Task failed')\n }\n}\n\nexport type TaskParent = {\n taskID: string\n taskSlug: string\n}\n\nexport const getRunTaskFunction = <TIsInline extends boolean>(\n state: RunTaskFunctionState,\n job: BaseJob,\n workflowConfig: WorkflowConfig<string>,\n req: PayloadRequest,\n isInline: TIsInline,\n updateJob: UpdateJobFunction,\n parent?: TaskParent,\n): TIsInline extends true ? RunInlineTaskFunction : RunTaskFunctions => {\n const runTask: <TTaskSlug extends string>(\n taskSlug: TTaskSlug,\n ) => TTaskSlug extends 'inline' ? RunInlineTaskFunction : RunTaskFunction<TTaskSlug> = (\n taskSlug,\n ) =>\n (async (\n taskID: Parameters<RunInlineTaskFunction>[0],\n {\n input,\n retries,\n task,\n }: Parameters<RunInlineTaskFunction>[1] & Parameters<RunTaskFunction<string>>[1],\n ) => {\n const executedAt = new Date()\n\n let inlineRunner: TaskHandler<TaskType> = null\n if (isInline) {\n inlineRunner = task\n }\n\n let taskConfig: TaskConfig<string>\n if (!isInline) {\n taskConfig = req.payload.config.jobs.tasks.find((t) => t.slug === taskSlug)\n\n if (!taskConfig) {\n throw new Error(`Task ${taskSlug} not found in workflow ${job.workflowSlug}`)\n }\n }\n\n const retriesConfigFromPropsNormalized =\n retries == undefined || retries == null\n ? {}\n : typeof retries === 'number'\n ? { attempts: retries }\n : retries\n const retriesConfigFromTaskConfigNormalized = taskConfig\n ? typeof taskConfig.retries === 'number'\n ? { attempts: taskConfig.retries }\n : taskConfig.retries\n : {}\n\n const finalRetriesConfig: RetryConfig = {\n ...retriesConfigFromTaskConfigNormalized,\n ...retriesConfigFromPropsNormalized, // Retry config from props takes precedence\n }\n\n const taskStatus: null | SingleTaskStatus<string> = job?.taskStatus?.[taskSlug]\n ? job.taskStatus[taskSlug][taskID]\n : null\n\n // Handle restoration of task if it succeeded in a previous run\n if (taskStatus && taskStatus.complete === true) {\n let shouldRestore = true\n if (finalRetriesConfig?.shouldRestore === false) {\n shouldRestore = false\n } else if (typeof finalRetriesConfig?.shouldRestore === 'function') {\n shouldRestore = await finalRetriesConfig.shouldRestore({ input, job, req, taskStatus })\n }\n if (shouldRestore) {\n return taskStatus.output\n }\n }\n\n let runner: TaskHandler<TaskType>\n if (isInline) {\n runner = inlineRunner\n } else {\n if (!taskConfig) {\n throw new Error(`Task ${taskSlug} not found in workflow ${job.workflowSlug}`)\n }\n runner = await getTaskHandlerFromConfig(taskConfig)\n }\n\n if (!runner || typeof runner !== 'function') {\n const errorMessage = isInline\n ? `Can't find runner for inline task with ID ${taskID}`\n : `Can't find runner while importing with the path ${typeof workflowConfig.handler === 'string' ? workflowConfig.handler : 'unknown - no string path'} in job type ${job.workflowSlug} for task ${taskSlug}.`\n req.payload.logger.error(errorMessage)\n\n await updateJob({\n error: {\n error: errorMessage,\n },\n hasError: true,\n log: [\n ...job.log,\n {\n completedAt: new Date().toISOString(),\n error: errorMessage,\n executedAt: executedAt.toISOString(),\n parent: req?.payload?.config?.jobs?.addParentToTaskLog ? parent : undefined,\n state: 'failed',\n taskID,\n taskSlug,\n },\n ],\n processing: false,\n })\n\n throw new Error(errorMessage)\n }\n\n let maxRetries: number | undefined = finalRetriesConfig?.attempts\n\n if (maxRetries === undefined || maxRetries === null) {\n // Inherit retries from workflow config, if they are undefined and the workflow config has retries configured\n if (workflowConfig.retries !== undefined && workflowConfig.retries !== null) {\n maxRetries =\n typeof workflowConfig.retries === 'object'\n ? workflowConfig.retries.attempts\n : workflowConfig.retries\n } else {\n maxRetries = 0\n }\n }\n\n let taskHandlerResult: TaskHandlerResult<string>\n let output: object = {}\n\n try {\n taskHandlerResult = await runner({\n inlineTask: getRunTaskFunction(state, job, workflowConfig, req, true, updateJob, {\n taskID,\n taskSlug,\n }),\n input,\n job: job as unknown as RunningJob<WorkflowTypes>, // TODO: Type this better\n req,\n tasks: getRunTaskFunction(state, job, workflowConfig, req, false, updateJob, {\n taskID,\n taskSlug,\n }),\n })\n } catch (err) {\n await handleTaskFailed({\n error: err,\n executedAt,\n input,\n job,\n maxRetries,\n output,\n parent,\n req,\n retriesConfig: finalRetriesConfig,\n state,\n taskConfig,\n taskID,\n taskSlug,\n taskStatus,\n updateJob,\n })\n throw new Error('Task failed')\n }\n\n if (taskHandlerResult.state === 'failed') {\n await handleTaskFailed({\n executedAt,\n input,\n job,\n maxRetries,\n output,\n parent,\n req,\n retriesConfig: finalRetriesConfig,\n state,\n taskConfig,\n taskHandlerResult,\n taskID,\n taskSlug,\n taskStatus,\n updateJob,\n })\n throw new Error('Task failed')\n } else {\n output = taskHandlerResult.output\n }\n\n if (taskConfig?.onSuccess) {\n await taskConfig.onSuccess()\n }\n\n if (!job.log) {\n job.log = []\n }\n job.log.push({\n completedAt: new Date().toISOString(),\n executedAt: executedAt.toISOString(),\n input,\n output,\n parent: req?.payload?.config?.jobs?.addParentToTaskLog ? parent : undefined,\n state: 'succeeded',\n taskID,\n taskSlug,\n })\n\n await updateJob({\n log: job.log,\n })\n\n return output\n }) as any\n\n if (isInline) {\n return runTask('inline') as TIsInline extends true ? RunInlineTaskFunction : RunTaskFunctions\n } else {\n const tasks: RunTaskFunctions = {}\n for (const task of req?.payload?.config?.jobs?.tasks ?? []) {\n tasks[task.slug] = runTask(task.slug)\n }\n return tasks as TIsInline extends true ? RunInlineTaskFunction : RunTaskFunctions\n }\n}\n"],"names":["calculateBackoffWaitUntil","importHandlerPath","getTaskHandlerFromConfig","taskConfig","handler","handleTaskFailed","error","executedAt","input","job","maxRetries","output","parent","req","retriesConfig","state","taskHandlerResult","taskID","taskSlug","taskStatus","updateJob","payload","logger","err","msg","onFail","log","errorJSON","name","message","stack","errorMessage","push","completedAt","Date","toISOString","config","jobs","addParentToTaskLog","undefined","waitUntil","complete","totalTried","reachedMaxRetries","hasError","processing","Error","workflowSlug","String","getRunTaskFunction","workflowConfig","isInline","runTask","retries","task","inlineRunner","tasks","find","t","slug","retriesConfigFromPropsNormalized","attempts","retriesConfigFromTaskConfigNormalized","finalRetriesConfig","shouldRestore","runner","inlineTask","onSuccess"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/queues/operations/runJobs/runJob/getRunTaskFunction.ts"],"sourcesContent":["import ObjectIdImport from 'bson-objectid'\n\n// @ts-strict-ignore\nimport type { PayloadRequest } from '../../../../types/index.js'\nimport type {\n RetryConfig,\n RunInlineTaskFunction,\n RunTaskFunction,\n RunTaskFunctions,\n TaskConfig,\n TaskHandler,\n TaskHandlerResult,\n TaskType,\n} from '../../../config/types/taskTypes.js'\nimport type {\n BaseJob,\n RunningJob,\n SingleTaskStatus,\n WorkflowConfig,\n WorkflowTypes,\n} from '../../../config/types/workflowTypes.js'\nimport type { UpdateJobFunction } from './getUpdateJobFunction.js'\n\nimport { calculateBackoffWaitUntil } from './calculateBackoffWaitUntil.js'\nimport { importHandlerPath } from './importHandlerPath.js'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\n// Helper object type to force being passed by reference\nexport type RunTaskFunctionState = {\n reachedMaxRetries: boolean\n}\n\nasync function getTaskHandlerFromConfig(taskConfig: TaskConfig<string>) {\n let handler: TaskHandler<TaskType>\n\n if (typeof taskConfig.handler === 'function') {\n handler = taskConfig.handler\n } else {\n handler = await importHandlerPath<TaskHandler<TaskType>>(taskConfig.handler)\n }\n return handler\n}\n\nexport async function handleTaskFailed({\n error,\n executedAt,\n input,\n job,\n maxRetries,\n output,\n parent,\n req,\n retriesConfig,\n state,\n taskConfig,\n taskHandlerResult,\n taskID,\n taskSlug,\n taskStatus,\n updateJob,\n}: {\n error?: Error\n executedAt: Date\n input: object\n job: BaseJob\n maxRetries: number\n output: object\n parent?: TaskParent\n req: PayloadRequest\n retriesConfig: number | RetryConfig\n state: RunTaskFunctionState\n taskConfig?: TaskConfig<string>\n taskHandlerResult?: TaskHandlerResult<string>\n taskID: string\n taskSlug: string\n taskStatus: null | SingleTaskStatus<string>\n updateJob: UpdateJobFunction\n}): Promise<never> {\n req.payload.logger.error({ err: error, job, msg: `Error running task ${taskID}`, taskSlug })\n\n if (taskConfig?.onFail) {\n await taskConfig.onFail()\n }\n\n if (!job.log) {\n job.log = []\n }\n const errorJSON = error\n ? {\n name: error.name,\n message: error.message,\n stack: error.stack,\n }\n : {\n message:\n taskHandlerResult.state === 'failed'\n ? (taskHandlerResult.errorMessage ?? taskHandlerResult.state)\n : 'failed',\n }\n\n job.log.push({\n id: new ObjectId().toHexString(),\n completedAt: new Date().toISOString(),\n error: errorJSON,\n executedAt: executedAt.toISOString(),\n input,\n output,\n parent: req?.payload?.config?.jobs?.addParentToTaskLog ? parent : undefined,\n state: 'failed',\n taskID,\n taskSlug,\n })\n\n if (job.waitUntil) {\n // Check if waitUntil is in the past\n const waitUntil = new Date(job.waitUntil)\n if (waitUntil < new Date()) {\n // Outdated waitUntil, remove it\n delete job.waitUntil\n }\n }\n\n if (!taskStatus?.complete && (taskStatus?.totalTried ?? 0) >= maxRetries) {\n state.reachedMaxRetries = true\n\n await updateJob({\n error,\n hasError: true,\n log: job.log,\n processing: false,\n waitUntil: job.waitUntil,\n })\n\n throw new Error(\n `Task ${taskSlug} has failed more than the allowed retries in workflow ${job.workflowSlug}${error ? `. Error: ${String(error)}` : ''}`,\n )\n } else {\n // Job will retry. Let's determine when!\n const waitUntil: Date = calculateBackoffWaitUntil({\n retriesConfig,\n totalTried: taskStatus?.totalTried ?? 0,\n })\n\n // Update job's waitUntil only if this waitUntil is later than the current one\n if (!job.waitUntil || waitUntil > new Date(job.waitUntil)) {\n job.waitUntil = waitUntil.toISOString()\n }\n\n await updateJob({\n log: job.log,\n processing: false,\n waitUntil: job.waitUntil,\n })\n throw error ?? new Error('Task failed')\n }\n}\n\nexport type TaskParent = {\n taskID: string\n taskSlug: string\n}\n\nexport const getRunTaskFunction = <TIsInline extends boolean>(\n state: RunTaskFunctionState,\n job: BaseJob,\n workflowConfig: WorkflowConfig<string>,\n req: PayloadRequest,\n isInline: TIsInline,\n updateJob: UpdateJobFunction,\n parent?: TaskParent,\n): TIsInline extends true ? RunInlineTaskFunction : RunTaskFunctions => {\n const runTask: <TTaskSlug extends string>(\n taskSlug: TTaskSlug,\n ) => TTaskSlug extends 'inline' ? RunInlineTaskFunction : RunTaskFunction<TTaskSlug> = (\n taskSlug,\n ) =>\n (async (\n taskID: Parameters<RunInlineTaskFunction>[0],\n {\n input,\n retries,\n task,\n }: Parameters<RunInlineTaskFunction>[1] & Parameters<RunTaskFunction<string>>[1],\n ) => {\n const executedAt = new Date()\n\n let inlineRunner: TaskHandler<TaskType> = null\n if (isInline) {\n inlineRunner = task\n }\n\n let taskConfig: TaskConfig<string>\n if (!isInline) {\n taskConfig = req.payload.config.jobs.tasks.find((t) => t.slug === taskSlug)\n\n if (!taskConfig) {\n throw new Error(`Task ${taskSlug} not found in workflow ${job.workflowSlug}`)\n }\n }\n\n const retriesConfigFromPropsNormalized =\n retries == undefined || retries == null\n ? {}\n : typeof retries === 'number'\n ? { attempts: retries }\n : retries\n const retriesConfigFromTaskConfigNormalized = taskConfig\n ? typeof taskConfig.retries === 'number'\n ? { attempts: taskConfig.retries }\n : taskConfig.retries\n : {}\n\n const finalRetriesConfig: RetryConfig = {\n ...retriesConfigFromTaskConfigNormalized,\n ...retriesConfigFromPropsNormalized, // Retry config from props takes precedence\n }\n\n const taskStatus: null | SingleTaskStatus<string> = job?.taskStatus?.[taskSlug]\n ? job.taskStatus[taskSlug][taskID]\n : null\n\n // Handle restoration of task if it succeeded in a previous run\n if (taskStatus && taskStatus.complete === true) {\n let shouldRestore = true\n if (finalRetriesConfig?.shouldRestore === false) {\n shouldRestore = false\n } else if (typeof finalRetriesConfig?.shouldRestore === 'function') {\n shouldRestore = await finalRetriesConfig.shouldRestore({ input, job, req, taskStatus })\n }\n if (shouldRestore) {\n return taskStatus.output\n }\n }\n\n let runner: TaskHandler<TaskType>\n if (isInline) {\n runner = inlineRunner\n } else {\n if (!taskConfig) {\n throw new Error(`Task ${taskSlug} not found in workflow ${job.workflowSlug}`)\n }\n runner = await getTaskHandlerFromConfig(taskConfig)\n }\n\n if (!runner || typeof runner !== 'function') {\n const errorMessage = isInline\n ? `Can't find runner for inline task with ID ${taskID}`\n : `Can't find runner while importing with the path ${typeof workflowConfig.handler === 'string' ? workflowConfig.handler : 'unknown - no string path'} in job type ${job.workflowSlug} for task ${taskSlug}.`\n req.payload.logger.error(errorMessage)\n\n await updateJob({\n error: {\n error: errorMessage,\n },\n hasError: true,\n log: [\n ...job.log,\n {\n id: new ObjectId().toHexString(),\n completedAt: new Date().toISOString(),\n error: errorMessage,\n executedAt: executedAt.toISOString(),\n parent: req?.payload?.config?.jobs?.addParentToTaskLog ? parent : undefined,\n state: 'failed',\n taskID,\n taskSlug,\n },\n ],\n processing: false,\n })\n\n throw new Error(errorMessage)\n }\n\n let maxRetries: number | undefined = finalRetriesConfig?.attempts\n\n if (maxRetries === undefined || maxRetries === null) {\n // Inherit retries from workflow config, if they are undefined and the workflow config has retries configured\n if (workflowConfig.retries !== undefined && workflowConfig.retries !== null) {\n maxRetries =\n typeof workflowConfig.retries === 'object'\n ? workflowConfig.retries.attempts\n : workflowConfig.retries\n } else {\n maxRetries = 0\n }\n }\n\n let taskHandlerResult: TaskHandlerResult<string>\n let output: object = {}\n\n try {\n taskHandlerResult = await runner({\n inlineTask: getRunTaskFunction(state, job, workflowConfig, req, true, updateJob, {\n taskID,\n taskSlug,\n }),\n input,\n job: job as unknown as RunningJob<WorkflowTypes>, // TODO: Type this better\n req,\n tasks: getRunTaskFunction(state, job, workflowConfig, req, false, updateJob, {\n taskID,\n taskSlug,\n }),\n })\n } catch (err) {\n await handleTaskFailed({\n error: err,\n executedAt,\n input,\n job,\n maxRetries,\n output,\n parent,\n req,\n retriesConfig: finalRetriesConfig,\n state,\n taskConfig,\n taskID,\n taskSlug,\n taskStatus,\n updateJob,\n })\n throw new Error('Task failed')\n }\n\n if (taskHandlerResult.state === 'failed') {\n await handleTaskFailed({\n executedAt,\n input,\n job,\n maxRetries,\n output,\n parent,\n req,\n retriesConfig: finalRetriesConfig,\n state,\n taskConfig,\n taskHandlerResult,\n taskID,\n taskSlug,\n taskStatus,\n updateJob,\n })\n throw new Error('Task failed')\n } else {\n output = taskHandlerResult.output\n }\n\n if (taskConfig?.onSuccess) {\n await taskConfig.onSuccess()\n }\n\n if (!job.log) {\n job.log = []\n }\n job.log.push({\n id: new ObjectId().toHexString(),\n completedAt: new Date().toISOString(),\n executedAt: executedAt.toISOString(),\n input,\n output,\n parent: req?.payload?.config?.jobs?.addParentToTaskLog ? parent : undefined,\n state: 'succeeded',\n taskID,\n taskSlug,\n })\n\n await updateJob({\n log: job.log,\n })\n\n return output\n }) as any\n\n if (isInline) {\n return runTask('inline') as TIsInline extends true ? RunInlineTaskFunction : RunTaskFunctions\n } else {\n const tasks: RunTaskFunctions = {}\n for (const task of req?.payload?.config?.jobs?.tasks ?? []) {\n tasks[task.slug] = runTask(task.slug)\n }\n return tasks as TIsInline extends true ? RunInlineTaskFunction : RunTaskFunctions\n }\n}\n"],"names":["ObjectIdImport","calculateBackoffWaitUntil","importHandlerPath","ObjectId","default","getTaskHandlerFromConfig","taskConfig","handler","handleTaskFailed","error","executedAt","input","job","maxRetries","output","parent","req","retriesConfig","state","taskHandlerResult","taskID","taskSlug","taskStatus","updateJob","payload","logger","err","msg","onFail","log","errorJSON","name","message","stack","errorMessage","push","id","toHexString","completedAt","Date","toISOString","config","jobs","addParentToTaskLog","undefined","waitUntil","complete","totalTried","reachedMaxRetries","hasError","processing","Error","workflowSlug","String","getRunTaskFunction","workflowConfig","isInline","runTask","retries","task","inlineRunner","tasks","find","t","slug","retriesConfigFromPropsNormalized","attempts","retriesConfigFromTaskConfigNormalized","finalRetriesConfig","shouldRestore","runner","inlineTask","onSuccess"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getUpdateJobFunction.d.ts","sourceRoot":"","sources":["../../../../../src/queues/operations/runJobs/runJob/getUpdateJobFunction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAA;AAIrE,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAE/E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,iBAAiB,CAuBzF"}
1
+ {"version":3,"file":"getUpdateJobFunction.d.ts","sourceRoot":"","sources":["../../../../../src/queues/operations/runJobs/runJob/getUpdateJobFunction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAA;AAIrE,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAE/E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,iBAAiB,CAoCzF"}
@@ -11,7 +11,20 @@ export function getUpdateJobFunction(job, req) {
11
11
  });
12
12
  // Update job object like this to modify the original object - that way, incoming changes (e.g. taskStatus field that will be re-generated through the hook) will be reflected in the calling function
13
13
  for(const key in updatedJob){
14
- job[key] = updatedJob[key];
14
+ if (key === 'log') {
15
+ if (!job.log) {
16
+ job.log = [];
17
+ }
18
+ // Add all new log entries to the original job.log object. Do not delete any existing log entries.
19
+ // Do not update existing log entries, as existing log entries should be immutable.
20
+ for (const logEntry of updatedJob.log){
21
+ if (!job.log.some((entry)=>entry.id === logEntry.id)) {
22
+ job.log.push(logEntry);
23
+ }
24
+ }
25
+ } else {
26
+ job[key] = updatedJob[key];
27
+ }
15
28
  }
16
29
  if (updatedJob.error?.cancelled) {
17
30
  const cancelledError = new Error('Job cancelled');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/queues/operations/runJobs/runJob/getUpdateJobFunction.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { PayloadRequest } from '../../../../types/index.js'\nimport type { BaseJob } from '../../../config/types/workflowTypes.js'\n\nimport { updateJob } from '../../../utilities/updateJob.js'\n\nexport type UpdateJobFunction = (jobData: Partial<BaseJob>) => Promise<BaseJob>\n\nexport function getUpdateJobFunction(job: BaseJob, req: PayloadRequest): UpdateJobFunction {\n return async (jobData) => {\n const updatedJob = await updateJob({\n id: job.id,\n data: jobData,\n depth: req.payload.config.jobs.depth,\n disableTransaction: true,\n req,\n })\n\n // Update job object like this to modify the original object - that way, incoming changes (e.g. taskStatus field that will be re-generated through the hook) will be reflected in the calling function\n for (const key in updatedJob) {\n job[key] = updatedJob[key]\n }\n\n if ((updatedJob.error as Record<string, unknown>)?.cancelled) {\n const cancelledError = new Error('Job cancelled') as { cancelled: boolean } & Error\n cancelledError.cancelled = true\n throw cancelledError\n }\n\n return updatedJob\n }\n}\n"],"names":["updateJob","getUpdateJobFunction","job","req","jobData","updatedJob","id","data","depth","payload","config","jobs","disableTransaction","key","error","cancelled","cancelledError","Error"],"mappings":"AAAA,oBAAoB;AAIpB,SAASA,SAAS,QAAQ,kCAAiC;AAI3D,OAAO,SAASC,qBAAqBC,GAAY,EAAEC,GAAmB;IACpE,OAAO,OAAOC;QACZ,MAAMC,aAAa,MAAML,UAAU;YACjCM,IAAIJ,IAAII,EAAE;YACVC,MAAMH;YACNI,OAAOL,IAAIM,OAAO,CAACC,MAAM,CAACC,IAAI,CAACH,KAAK;YACpCI,oBAAoB;YACpBT;QACF;QAEA,sMAAsM;QACtM,IAAK,MAAMU,OAAOR,WAAY;YAC5BH,GAAG,CAACW,IAAI,GAAGR,UAAU,CAACQ,IAAI;QAC5B;QAEA,IAAKR,WAAWS,KAAK,EAA8BC,WAAW;YAC5D,MAAMC,iBAAiB,IAAIC,MAAM;YACjCD,eAAeD,SAAS,GAAG;YAC3B,MAAMC;QACR;QAEA,OAAOX;IACT;AACF"}
1
+ {"version":3,"sources":["../../../../../src/queues/operations/runJobs/runJob/getUpdateJobFunction.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { PayloadRequest } from '../../../../types/index.js'\nimport type { BaseJob } from '../../../config/types/workflowTypes.js'\n\nimport { updateJob } from '../../../utilities/updateJob.js'\n\nexport type UpdateJobFunction = (jobData: Partial<BaseJob>) => Promise<BaseJob>\n\nexport function getUpdateJobFunction(job: BaseJob, req: PayloadRequest): UpdateJobFunction {\n return async (jobData) => {\n const updatedJob = await updateJob({\n id: job.id,\n data: jobData,\n depth: req.payload.config.jobs.depth,\n disableTransaction: true,\n req,\n })\n\n // Update job object like this to modify the original object - that way, incoming changes (e.g. taskStatus field that will be re-generated through the hook) will be reflected in the calling function\n for (const key in updatedJob) {\n if (key === 'log') {\n if (!job.log) {\n job.log = []\n }\n // Add all new log entries to the original job.log object. Do not delete any existing log entries.\n // Do not update existing log entries, as existing log entries should be immutable.\n for (const logEntry of updatedJob.log) {\n if (!job.log.some((entry) => entry.id === logEntry.id)) {\n job.log.push(logEntry)\n }\n }\n } else {\n job[key] = updatedJob[key]\n }\n }\n\n if ((updatedJob.error as Record<string, unknown>)?.cancelled) {\n const cancelledError = new Error('Job cancelled') as { cancelled: boolean } & Error\n cancelledError.cancelled = true\n throw cancelledError\n }\n\n return updatedJob\n }\n}\n"],"names":["updateJob","getUpdateJobFunction","job","req","jobData","updatedJob","id","data","depth","payload","config","jobs","disableTransaction","key","log","logEntry","some","entry","push","error","cancelled","cancelledError","Error"],"mappings":"AAAA,oBAAoB;AAIpB,SAASA,SAAS,QAAQ,kCAAiC;AAI3D,OAAO,SAASC,qBAAqBC,GAAY,EAAEC,GAAmB;IACpE,OAAO,OAAOC;QACZ,MAAMC,aAAa,MAAML,UAAU;YACjCM,IAAIJ,IAAII,EAAE;YACVC,MAAMH;YACNI,OAAOL,IAAIM,OAAO,CAACC,MAAM,CAACC,IAAI,CAACH,KAAK;YACpCI,oBAAoB;YACpBT;QACF;QAEA,sMAAsM;QACtM,IAAK,MAAMU,OAAOR,WAAY;YAC5B,IAAIQ,QAAQ,OAAO;gBACjB,IAAI,CAACX,IAAIY,GAAG,EAAE;oBACZZ,IAAIY,GAAG,GAAG,EAAE;gBACd;gBACA,kGAAkG;gBAClG,mFAAmF;gBACnF,KAAK,MAAMC,YAAYV,WAAWS,GAAG,CAAE;oBACrC,IAAI,CAACZ,IAAIY,GAAG,CAACE,IAAI,CAAC,CAACC,QAAUA,MAAMX,EAAE,KAAKS,SAAST,EAAE,GAAG;wBACtDJ,IAAIY,GAAG,CAACI,IAAI,CAACH;oBACf;gBACF;YACF,OAAO;gBACLb,GAAG,CAACW,IAAI,GAAGR,UAAU,CAACQ,IAAI;YAC5B;QACF;QAEA,IAAKR,WAAWc,KAAK,EAA8BC,WAAW;YAC5D,MAAMC,iBAAiB,IAAIC,MAAM;YACjCD,eAAeD,SAAS,GAAG;YAC3B,MAAMC;QACR;QAEA,OAAOhB;IACT;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/queues/operations/runJobs/runJob/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,KAAK,EACV,OAAO,EAEP,cAAc,EACd,eAAe,EACf,aAAa,EACd,MAAM,wCAAwC,CAAA;AAE/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAKlE,KAAK,IAAI,GAAG;IACV,GAAG,EAAE,OAAO,CAAA;IACZ,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,EAAE,iBAAiB,CAAA;IAC5B,cAAc,EAAE,cAAc,CAAC,aAAa,CAAC,CAAA;IAC7C,eAAe,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;CAChD,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,2BAA2B,GAAG,SAAS,CAAA;AAE5E,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,YAAY,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,MAAM,8DAMhB,IAAI,KAAG,OAAO,CAAC,YAAY,CAwD7B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/queues/operations/runJobs/runJob/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,KAAK,EACV,OAAO,EAEP,cAAc,EACd,eAAe,EACf,aAAa,EACd,MAAM,wCAAwC,CAAA;AAE/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAKlE,KAAK,IAAI,GAAG;IACV,GAAG,EAAE,OAAO,CAAA;IACZ,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,EAAE,iBAAiB,CAAA;IAC5B,cAAc,EAAE,cAAc,CAAC,aAAa,CAAC,CAAA;IAC7C,eAAe,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;CAChD,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,2BAA2B,GAAG,SAAS,CAAA;AAE5E,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,YAAY,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,MAAM,8DAMhB,IAAI,KAAG,OAAO,CAAC,YAAY,CA0D7B,CAAA"}
@@ -34,6 +34,7 @@ export const runJob = async ({ job, req, updateJob, workflowConfig, workflowHand
34
34
  await updateJob({
35
35
  error: errorJSON,
36
36
  hasError: hasFinalError,
37
+ log: job.log,
37
38
  processing: false,
38
39
  totalTried: (job.totalTried ?? 0) + 1
39
40
  });
@@ -44,6 +45,7 @@ export const runJob = async ({ job, req, updateJob, workflowConfig, workflowHand
44
45
  // Workflow has completed
45
46
  await updateJob({
46
47
  completedAt: new Date().toISOString(),
48
+ log: job.log,
47
49
  processing: false,
48
50
  totalTried: (job.totalTried ?? 0) + 1
49
51
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/queues/operations/runJobs/runJob/index.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { PayloadRequest } from '../../../../types/index.js'\nimport type {\n BaseJob,\n RunningJob,\n WorkflowConfig,\n WorkflowHandler,\n WorkflowTypes,\n} from '../../../config/types/workflowTypes.js'\nimport type { RunTaskFunctionState } from './getRunTaskFunction.js'\nimport type { UpdateJobFunction } from './getUpdateJobFunction.js'\n\nimport { getRunTaskFunction } from './getRunTaskFunction.js'\nimport { handleWorkflowError } from './handleWorkflowError.js'\n\ntype Args = {\n job: BaseJob\n req: PayloadRequest\n updateJob: UpdateJobFunction\n workflowConfig: WorkflowConfig<WorkflowTypes>\n workflowHandler: WorkflowHandler<WorkflowTypes>\n}\n\nexport type JobRunStatus = 'error' | 'error-reached-max-retries' | 'success'\n\nexport type RunJobResult = {\n status: JobRunStatus\n}\n\nexport const runJob = async ({\n job,\n req,\n updateJob,\n workflowConfig,\n workflowHandler,\n}: Args): Promise<RunJobResult> => {\n // Object so that we can pass contents by reference, not value.\n // We want any mutations to be reflected in here.\n const state: RunTaskFunctionState = {\n reachedMaxRetries: false,\n }\n\n // Run the job\n try {\n await workflowHandler({\n inlineTask: getRunTaskFunction(state, job, workflowConfig, req, true, updateJob),\n job: job as unknown as RunningJob<WorkflowTypes>, //TODO: Type this better\n req,\n tasks: getRunTaskFunction(state, job, workflowConfig, req, false, updateJob),\n })\n } catch (err) {\n const { hasFinalError } = handleWorkflowError({\n error: err,\n job,\n req,\n state,\n workflowConfig,\n })\n\n const errorJSON = hasFinalError\n ? {\n name: err.name,\n cancelled: Boolean('cancelled' in err && err.cancelled),\n message: err.message,\n stack: err.stack,\n }\n : undefined\n // Tasks update the job if they error - but in case there is an unhandled error (e.g. in the workflow itself, not in a task)\n // we need to ensure the job is updated to reflect the error\n await updateJob({\n error: errorJSON,\n hasError: hasFinalError, // If reached max retries => final error. If hasError is true this job will not be retried\n processing: false,\n totalTried: (job.totalTried ?? 0) + 1,\n })\n\n return {\n status: hasFinalError ? 'error-reached-max-retries' : 'error',\n }\n }\n\n // Workflow has completed\n await updateJob({\n completedAt: new Date().toISOString(),\n processing: false,\n totalTried: (job.totalTried ?? 0) + 1,\n })\n\n return {\n status: 'success',\n }\n}\n"],"names":["getRunTaskFunction","handleWorkflowError","runJob","job","req","updateJob","workflowConfig","workflowHandler","state","reachedMaxRetries","inlineTask","tasks","err","hasFinalError","error","errorJSON","name","cancelled","Boolean","message","stack","undefined","hasError","processing","totalTried","status","completedAt","Date","toISOString"],"mappings":"AAAA,oBAAoB;AAYpB,SAASA,kBAAkB,QAAQ,0BAAyB;AAC5D,SAASC,mBAAmB,QAAQ,2BAA0B;AAgB9D,OAAO,MAAMC,SAAS,OAAO,EAC3BC,GAAG,EACHC,GAAG,EACHC,SAAS,EACTC,cAAc,EACdC,eAAe,EACV;IACL,+DAA+D;IAC/D,iDAAiD;IACjD,MAAMC,QAA8B;QAClCC,mBAAmB;IACrB;IAEA,cAAc;IACd,IAAI;QACF,MAAMF,gBAAgB;YACpBG,YAAYV,mBAAmBQ,OAAOL,KAAKG,gBAAgBF,KAAK,MAAMC;YACtEF,KAAKA;YACLC;YACAO,OAAOX,mBAAmBQ,OAAOL,KAAKG,gBAAgBF,KAAK,OAAOC;QACpE;IACF,EAAE,OAAOO,KAAK;QACZ,MAAM,EAAEC,aAAa,EAAE,GAAGZ,oBAAoB;YAC5Ca,OAAOF;YACPT;YACAC;YACAI;YACAF;QACF;QAEA,MAAMS,YAAYF,gBACd;YACEG,MAAMJ,IAAII,IAAI;YACdC,WAAWC,QAAQ,eAAeN,OAAOA,IAAIK,SAAS;YACtDE,SAASP,IAAIO,OAAO;YACpBC,OAAOR,IAAIQ,KAAK;QAClB,IACAC;QACJ,4HAA4H;QAC5H,4DAA4D;QAC5D,MAAMhB,UAAU;YACdS,OAAOC;YACPO,UAAUT;YACVU,YAAY;YACZC,YAAY,AAACrB,CAAAA,IAAIqB,UAAU,IAAI,CAAA,IAAK;QACtC;QAEA,OAAO;YACLC,QAAQZ,gBAAgB,8BAA8B;QACxD;IACF;IAEA,yBAAyB;IACzB,MAAMR,UAAU;QACdqB,aAAa,IAAIC,OAAOC,WAAW;QACnCL,YAAY;QACZC,YAAY,AAACrB,CAAAA,IAAIqB,UAAU,IAAI,CAAA,IAAK;IACtC;IAEA,OAAO;QACLC,QAAQ;IACV;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../../../src/queues/operations/runJobs/runJob/index.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type { PayloadRequest } from '../../../../types/index.js'\nimport type {\n BaseJob,\n RunningJob,\n WorkflowConfig,\n WorkflowHandler,\n WorkflowTypes,\n} from '../../../config/types/workflowTypes.js'\nimport type { RunTaskFunctionState } from './getRunTaskFunction.js'\nimport type { UpdateJobFunction } from './getUpdateJobFunction.js'\n\nimport { getRunTaskFunction } from './getRunTaskFunction.js'\nimport { handleWorkflowError } from './handleWorkflowError.js'\n\ntype Args = {\n job: BaseJob\n req: PayloadRequest\n updateJob: UpdateJobFunction\n workflowConfig: WorkflowConfig<WorkflowTypes>\n workflowHandler: WorkflowHandler<WorkflowTypes>\n}\n\nexport type JobRunStatus = 'error' | 'error-reached-max-retries' | 'success'\n\nexport type RunJobResult = {\n status: JobRunStatus\n}\n\nexport const runJob = async ({\n job,\n req,\n updateJob,\n workflowConfig,\n workflowHandler,\n}: Args): Promise<RunJobResult> => {\n // Object so that we can pass contents by reference, not value.\n // We want any mutations to be reflected in here.\n const state: RunTaskFunctionState = {\n reachedMaxRetries: false,\n }\n\n // Run the job\n try {\n await workflowHandler({\n inlineTask: getRunTaskFunction(state, job, workflowConfig, req, true, updateJob),\n job: job as unknown as RunningJob<WorkflowTypes>, //TODO: Type this better\n req,\n tasks: getRunTaskFunction(state, job, workflowConfig, req, false, updateJob),\n })\n } catch (err) {\n const { hasFinalError } = handleWorkflowError({\n error: err,\n job,\n req,\n state,\n workflowConfig,\n })\n\n const errorJSON = hasFinalError\n ? {\n name: err.name,\n cancelled: Boolean('cancelled' in err && err.cancelled),\n message: err.message,\n stack: err.stack,\n }\n : undefined\n // Tasks update the job if they error - but in case there is an unhandled error (e.g. in the workflow itself, not in a task)\n // we need to ensure the job is updated to reflect the error\n await updateJob({\n error: errorJSON,\n hasError: hasFinalError, // If reached max retries => final error. If hasError is true this job will not be retried\n log: job.log,\n processing: false,\n totalTried: (job.totalTried ?? 0) + 1,\n })\n\n return {\n status: hasFinalError ? 'error-reached-max-retries' : 'error',\n }\n }\n\n // Workflow has completed\n await updateJob({\n completedAt: new Date().toISOString(),\n log: job.log,\n processing: false,\n totalTried: (job.totalTried ?? 0) + 1,\n })\n\n return {\n status: 'success',\n }\n}\n"],"names":["getRunTaskFunction","handleWorkflowError","runJob","job","req","updateJob","workflowConfig","workflowHandler","state","reachedMaxRetries","inlineTask","tasks","err","hasFinalError","error","errorJSON","name","cancelled","Boolean","message","stack","undefined","hasError","log","processing","totalTried","status","completedAt","Date","toISOString"],"mappings":"AAAA,oBAAoB;AAYpB,SAASA,kBAAkB,QAAQ,0BAAyB;AAC5D,SAASC,mBAAmB,QAAQ,2BAA0B;AAgB9D,OAAO,MAAMC,SAAS,OAAO,EAC3BC,GAAG,EACHC,GAAG,EACHC,SAAS,EACTC,cAAc,EACdC,eAAe,EACV;IACL,+DAA+D;IAC/D,iDAAiD;IACjD,MAAMC,QAA8B;QAClCC,mBAAmB;IACrB;IAEA,cAAc;IACd,IAAI;QACF,MAAMF,gBAAgB;YACpBG,YAAYV,mBAAmBQ,OAAOL,KAAKG,gBAAgBF,KAAK,MAAMC;YACtEF,KAAKA;YACLC;YACAO,OAAOX,mBAAmBQ,OAAOL,KAAKG,gBAAgBF,KAAK,OAAOC;QACpE;IACF,EAAE,OAAOO,KAAK;QACZ,MAAM,EAAEC,aAAa,EAAE,GAAGZ,oBAAoB;YAC5Ca,OAAOF;YACPT;YACAC;YACAI;YACAF;QACF;QAEA,MAAMS,YAAYF,gBACd;YACEG,MAAMJ,IAAII,IAAI;YACdC,WAAWC,QAAQ,eAAeN,OAAOA,IAAIK,SAAS;YACtDE,SAASP,IAAIO,OAAO;YACpBC,OAAOR,IAAIQ,KAAK;QAClB,IACAC;QACJ,4HAA4H;QAC5H,4DAA4D;QAC5D,MAAMhB,UAAU;YACdS,OAAOC;YACPO,UAAUT;YACVU,KAAKpB,IAAIoB,GAAG;YACZC,YAAY;YACZC,YAAY,AAACtB,CAAAA,IAAIsB,UAAU,IAAI,CAAA,IAAK;QACtC;QAEA,OAAO;YACLC,QAAQb,gBAAgB,8BAA8B;QACxD;IACF;IAEA,yBAAyB;IACzB,MAAMR,UAAU;QACdsB,aAAa,IAAIC,OAAOC,WAAW;QACnCN,KAAKpB,IAAIoB,GAAG;QACZC,YAAY;QACZC,YAAY,AAACtB,CAAAA,IAAIsB,UAAU,IAAI,CAAA,IAAK;IACtC;IAEA,OAAO;QACLC,QAAQ;IACV;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"updateJob.d.ts","sourceRoot":"","sources":["../../../src/queues/utilities/updateJob.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAA;AAK/D,KAAK,QAAQ,GAAG;IACd,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,KAAK,QAAQ,GAAG;IACd,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,KAAK,SAAS,GAAG;IACf,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,KAAK,WAAW,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAA;AAEpD;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,oBAKxD;AAED,wBAAsB,UAAU,CAAC,EAC/B,EAAE,EACF,IAAI,EACJ,KAAK,EACL,kBAAkB,EAClB,KAAK,EAAE,QAAQ,EACf,GAAG,EACH,SAAS,EACT,IAAI,EACJ,KAAK,EAAE,QAAQ,GAChB,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAkDzC"}
1
+ {"version":3,"file":"updateJob.d.ts","sourceRoot":"","sources":["../../../src/queues/utilities/updateJob.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAA;AAI/D,KAAK,QAAQ,GAAG;IACd,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,KAAK,QAAQ,GAAG;IACd,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,IAAI,CAAC,EAAE,KAAK,CAAA;IACZ,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,KAAK,SAAS,GAAG;IACf,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,KAAK,WAAW,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAA;AAEpD;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,oBAKxD;AAED,wBAAsB,UAAU,CAAC,EAC/B,EAAE,EACF,IAAI,EACJ,KAAK,EACL,kBAAkB,EAClB,KAAK,EAAE,QAAQ,EACf,GAAG,EACH,SAAS,EACT,IAAI,EACJ,KAAK,EAAE,QAAQ,GAChB,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CA6DzC"}
@@ -1,5 +1,4 @@
1
1
  import { jobAfterRead, jobsCollectionSlug } from '../config/index.js';
2
- import { sanitizeUpdateData } from './sanitizeUpdateData.js';
3
2
  /**
4
3
  * Convenience method for updateJobs by id
5
4
  */ export async function updateJob(args) {
@@ -31,25 +30,27 @@ export async function updateJobs({ id, data, depth, disableTransaction, limit: l
31
30
  }
32
31
  return result.docs;
33
32
  }
33
+ const jobReq = {
34
+ transactionID: req.payload.db.name !== 'mongoose' ? await req.payload.db.beginTransaction() : undefined
35
+ };
34
36
  const args = id ? {
35
37
  id,
36
- data: sanitizeUpdateData({
37
- data
38
- }),
39
- req: disableTransaction === true ? undefined : req,
38
+ data,
39
+ req: jobReq,
40
40
  returning
41
41
  } : {
42
- data: sanitizeUpdateData({
43
- data
44
- }),
42
+ data,
45
43
  limit,
46
- req: disableTransaction === true ? undefined : req,
44
+ req: jobReq,
47
45
  returning,
48
46
  sort,
49
47
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
50
48
  where: where
51
49
  };
52
50
  const updatedJobs = await req.payload.db.updateJobs(args);
51
+ if (req.payload.db.name !== 'mongoose' && jobReq.transactionID) {
52
+ await req.payload.db.commitTransaction(jobReq.transactionID);
53
+ }
53
54
  if (returning === false || !updatedJobs?.length) {
54
55
  return null;
55
56
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/queues/utilities/updateJob.ts"],"sourcesContent":["import type { ManyOptions } from '../../collections/operations/local/update.js'\nimport type { UpdateJobsArgs } from '../../database/types.js'\nimport type { PayloadRequest, Sort, Where } from '../../types/index.js'\nimport type { BaseJob } from '../config/types/workflowTypes.js'\n\nimport { jobAfterRead, jobsCollectionSlug } from '../config/index.js'\nimport { sanitizeUpdateData } from './sanitizeUpdateData.js'\n\ntype BaseArgs = {\n data: Partial<BaseJob>\n depth?: number\n disableTransaction?: boolean\n limit?: number\n req: PayloadRequest\n returning?: boolean\n}\n\ntype ArgsByID = {\n id: number | string\n limit?: never\n sort?: never\n where?: never\n}\n\ntype ArgsWhere = {\n id?: never\n limit?: number\n sort?: Sort\n where: Where\n}\n\ntype RunJobsArgs = (ArgsByID | ArgsWhere) & BaseArgs\n\n/**\n * Convenience method for updateJobs by id\n */\nexport async function updateJob(args: ArgsByID & BaseArgs) {\n const result = await updateJobs(args)\n if (result) {\n return result[0]\n }\n}\n\nexport async function updateJobs({\n id,\n data,\n depth,\n disableTransaction,\n limit: limitArg,\n req,\n returning,\n sort,\n where: whereArg,\n}: RunJobsArgs): Promise<BaseJob[] | null> {\n const limit = id ? 1 : limitArg\n const where = id ? { id: { equals: id } } : whereArg\n\n if (depth || req.payload.config?.jobs?.runHooks) {\n const result = await req.payload.update({\n id,\n collection: jobsCollectionSlug,\n data,\n depth,\n disableTransaction,\n limit,\n req,\n where,\n } as ManyOptions<any, any>)\n if (returning === false || !result) {\n return null\n }\n return result.docs as BaseJob[]\n }\n\n const args: UpdateJobsArgs = id\n ? {\n id,\n data: sanitizeUpdateData({ data }),\n req: disableTransaction === true ? undefined : req,\n returning,\n }\n : {\n data: sanitizeUpdateData({ data }),\n limit,\n req: disableTransaction === true ? undefined : req,\n returning,\n sort,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n where: where as Where,\n }\n\n const updatedJobs: BaseJob[] | null = await req.payload.db.updateJobs(args)\n\n if (returning === false || !updatedJobs?.length) {\n return null\n }\n\n return updatedJobs.map((updatedJob) => {\n return jobAfterRead({\n config: req.payload.config,\n doc: updatedJob,\n })\n })\n}\n"],"names":["jobAfterRead","jobsCollectionSlug","sanitizeUpdateData","updateJob","args","result","updateJobs","id","data","depth","disableTransaction","limit","limitArg","req","returning","sort","where","whereArg","equals","payload","config","jobs","runHooks","update","collection","docs","undefined","updatedJobs","db","length","map","updatedJob","doc"],"mappings":"AAKA,SAASA,YAAY,EAAEC,kBAAkB,QAAQ,qBAAoB;AACrE,SAASC,kBAAkB,QAAQ,0BAAyB;AA2B5D;;CAEC,GACD,OAAO,eAAeC,UAAUC,IAAyB;IACvD,MAAMC,SAAS,MAAMC,WAAWF;IAChC,IAAIC,QAAQ;QACV,OAAOA,MAAM,CAAC,EAAE;IAClB;AACF;AAEA,OAAO,eAAeC,WAAW,EAC/BC,EAAE,EACFC,IAAI,EACJC,KAAK,EACLC,kBAAkB,EAClBC,OAAOC,QAAQ,EACfC,GAAG,EACHC,SAAS,EACTC,IAAI,EACJC,OAAOC,QAAQ,EACH;IACZ,MAAMN,QAAQJ,KAAK,IAAIK;IACvB,MAAMI,QAAQT,KAAK;QAAEA,IAAI;YAAEW,QAAQX;QAAG;IAAE,IAAIU;IAE5C,IAAIR,SAASI,IAAIM,OAAO,CAACC,MAAM,EAAEC,MAAMC,UAAU;QAC/C,MAAMjB,SAAS,MAAMQ,IAAIM,OAAO,CAACI,MAAM,CAAC;YACtChB;YACAiB,YAAYvB;YACZO;YACAC;YACAC;YACAC;YACAE;YACAG;QACF;QACA,IAAIF,cAAc,SAAS,CAACT,QAAQ;YAClC,OAAO;QACT;QACA,OAAOA,OAAOoB,IAAI;IACpB;IAEA,MAAMrB,OAAuBG,KACzB;QACEA;QACAC,MAAMN,mBAAmB;YAAEM;QAAK;QAChCK,KAAKH,uBAAuB,OAAOgB,YAAYb;QAC/CC;IACF,IACA;QACEN,MAAMN,mBAAmB;YAAEM;QAAK;QAChCG;QACAE,KAAKH,uBAAuB,OAAOgB,YAAYb;QAC/CC;QACAC;QACA,4EAA4E;QAC5EC,OAAOA;IACT;IAEJ,MAAMW,cAAgC,MAAMd,IAAIM,OAAO,CAACS,EAAE,CAACtB,UAAU,CAACF;IAEtE,IAAIU,cAAc,SAAS,CAACa,aAAaE,QAAQ;QAC/C,OAAO;IACT;IAEA,OAAOF,YAAYG,GAAG,CAAC,CAACC;QACtB,OAAO/B,aAAa;YAClBoB,QAAQP,IAAIM,OAAO,CAACC,MAAM;YAC1BY,KAAKD;QACP;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/queues/utilities/updateJob.ts"],"sourcesContent":["import type { ManyOptions } from '../../collections/operations/local/update.js'\nimport type { UpdateJobsArgs } from '../../database/types.js'\nimport type { PayloadRequest, Sort, Where } from '../../types/index.js'\nimport type { BaseJob } from '../config/types/workflowTypes.js'\n\nimport { jobAfterRead, jobsCollectionSlug } from '../config/index.js'\n\ntype BaseArgs = {\n data: Partial<BaseJob>\n depth?: number\n disableTransaction?: boolean\n limit?: number\n req: PayloadRequest\n returning?: boolean\n}\n\ntype ArgsByID = {\n id: number | string\n limit?: never\n sort?: never\n where?: never\n}\n\ntype ArgsWhere = {\n id?: never\n limit?: number\n sort?: Sort\n where: Where\n}\n\ntype RunJobsArgs = (ArgsByID | ArgsWhere) & BaseArgs\n\n/**\n * Convenience method for updateJobs by id\n */\nexport async function updateJob(args: ArgsByID & BaseArgs) {\n const result = await updateJobs(args)\n if (result) {\n return result[0]\n }\n}\n\nexport async function updateJobs({\n id,\n data,\n depth,\n disableTransaction,\n limit: limitArg,\n req,\n returning,\n sort,\n where: whereArg,\n}: RunJobsArgs): Promise<BaseJob[] | null> {\n const limit = id ? 1 : limitArg\n const where = id ? { id: { equals: id } } : whereArg\n\n if (depth || req.payload.config?.jobs?.runHooks) {\n const result = await req.payload.update({\n id,\n collection: jobsCollectionSlug,\n data,\n depth,\n disableTransaction,\n limit,\n req,\n where,\n } as ManyOptions<any, any>)\n if (returning === false || !result) {\n return null\n }\n return result.docs as BaseJob[]\n }\n\n const jobReq = {\n transactionID:\n req.payload.db.name !== 'mongoose'\n ? ((await req.payload.db.beginTransaction()) as string)\n : undefined,\n }\n\n const args: UpdateJobsArgs = id\n ? {\n id,\n data,\n req: jobReq,\n returning,\n }\n : {\n data,\n limit,\n req: jobReq,\n returning,\n sort,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n where: where as Where,\n }\n\n const updatedJobs: BaseJob[] | null = await req.payload.db.updateJobs(args)\n\n if (req.payload.db.name !== 'mongoose' && jobReq.transactionID) {\n await req.payload.db.commitTransaction(jobReq.transactionID)\n }\n\n if (returning === false || !updatedJobs?.length) {\n return null\n }\n\n return updatedJobs.map((updatedJob) => {\n return jobAfterRead({\n config: req.payload.config,\n doc: updatedJob,\n })\n })\n}\n"],"names":["jobAfterRead","jobsCollectionSlug","updateJob","args","result","updateJobs","id","data","depth","disableTransaction","limit","limitArg","req","returning","sort","where","whereArg","equals","payload","config","jobs","runHooks","update","collection","docs","jobReq","transactionID","db","name","beginTransaction","undefined","updatedJobs","commitTransaction","length","map","updatedJob","doc"],"mappings":"AAKA,SAASA,YAAY,EAAEC,kBAAkB,QAAQ,qBAAoB;AA2BrE;;CAEC,GACD,OAAO,eAAeC,UAAUC,IAAyB;IACvD,MAAMC,SAAS,MAAMC,WAAWF;IAChC,IAAIC,QAAQ;QACV,OAAOA,MAAM,CAAC,EAAE;IAClB;AACF;AAEA,OAAO,eAAeC,WAAW,EAC/BC,EAAE,EACFC,IAAI,EACJC,KAAK,EACLC,kBAAkB,EAClBC,OAAOC,QAAQ,EACfC,GAAG,EACHC,SAAS,EACTC,IAAI,EACJC,OAAOC,QAAQ,EACH;IACZ,MAAMN,QAAQJ,KAAK,IAAIK;IACvB,MAAMI,QAAQT,KAAK;QAAEA,IAAI;YAAEW,QAAQX;QAAG;IAAE,IAAIU;IAE5C,IAAIR,SAASI,IAAIM,OAAO,CAACC,MAAM,EAAEC,MAAMC,UAAU;QAC/C,MAAMjB,SAAS,MAAMQ,IAAIM,OAAO,CAACI,MAAM,CAAC;YACtChB;YACAiB,YAAYtB;YACZM;YACAC;YACAC;YACAC;YACAE;YACAG;QACF;QACA,IAAIF,cAAc,SAAS,CAACT,QAAQ;YAClC,OAAO;QACT;QACA,OAAOA,OAAOoB,IAAI;IACpB;IAEA,MAAMC,SAAS;QACbC,eACEd,IAAIM,OAAO,CAACS,EAAE,CAACC,IAAI,KAAK,aAClB,MAAMhB,IAAIM,OAAO,CAACS,EAAE,CAACE,gBAAgB,KACvCC;IACR;IAEA,MAAM3B,OAAuBG,KACzB;QACEA;QACAC;QACAK,KAAKa;QACLZ;IACF,IACA;QACEN;QACAG;QACAE,KAAKa;QACLZ;QACAC;QACA,4EAA4E;QAC5EC,OAAOA;IACT;IAEJ,MAAMgB,cAAgC,MAAMnB,IAAIM,OAAO,CAACS,EAAE,CAACtB,UAAU,CAACF;IAEtE,IAAIS,IAAIM,OAAO,CAACS,EAAE,CAACC,IAAI,KAAK,cAAcH,OAAOC,aAAa,EAAE;QAC9D,MAAMd,IAAIM,OAAO,CAACS,EAAE,CAACK,iBAAiB,CAACP,OAAOC,aAAa;IAC7D;IAEA,IAAIb,cAAc,SAAS,CAACkB,aAAaE,QAAQ;QAC/C,OAAO;IACT;IAEA,OAAOF,YAAYG,GAAG,CAAC,CAACC;QACtB,OAAOnC,aAAa;YAClBmB,QAAQP,IAAIM,OAAO,CAACC,MAAM;YAC1BiB,KAAKD;QACP;IACF;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "3.32.0-canary.3",
3
+ "version": "3.32.0-internal.30bda70",
4
4
  "description": "Node, React, Headless CMS and Application Framework built on Next.js",
5
5
  "keywords": [
6
6
  "admin panel",
@@ -99,7 +99,7 @@
99
99
  "tsx": "4.19.2",
100
100
  "uuid": "10.0.0",
101
101
  "ws": "^8.16.0",
102
- "@payloadcms/translations": "3.32.0-canary.3"
102
+ "@payloadcms/translations": "3.32.0-internal.30bda70"
103
103
  },
104
104
  "devDependencies": {
105
105
  "@hyrious/esbuild-plugin-commonjs": "^0.2.4",
@@ -1,9 +0,0 @@
1
- import type { BaseJob } from '../config/types/workflowTypes.js';
2
- /**
3
- * Our payload operations sanitize the input data to, for example, add missing IDs to array rows.
4
- * This function is used to manually sanitize the data for direct db adapter operations
5
- */
6
- export declare function sanitizeUpdateData({ data }: {
7
- data: Partial<BaseJob>;
8
- }): Partial<BaseJob>;
9
- //# sourceMappingURL=sanitizeUpdateData.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sanitizeUpdateData.d.ts","sourceRoot":"","sources":["../../../src/queues/utilities/sanitizeUpdateData.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAA;AAK/D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBzF"}
@@ -1,25 +0,0 @@
1
- import ObjectIdImport from 'bson-objectid';
2
- const ObjectId = ObjectIdImport.default || ObjectIdImport;
3
- /**
4
- * Our payload operations sanitize the input data to, for example, add missing IDs to array rows.
5
- * This function is used to manually sanitize the data for direct db adapter operations
6
- */ export function sanitizeUpdateData({ data }) {
7
- if (data.log) {
8
- const sanitizedData = {
9
- ...data
10
- };
11
- sanitizedData.log = sanitizedData?.log?.map((log)=>{
12
- if (log.id) {
13
- return log;
14
- }
15
- return {
16
- ...log,
17
- id: new ObjectId().toHexString()
18
- };
19
- });
20
- return sanitizedData;
21
- }
22
- return data;
23
- }
24
-
25
- //# sourceMappingURL=sanitizeUpdateData.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/queues/utilities/sanitizeUpdateData.ts"],"sourcesContent":["import ObjectIdImport from 'bson-objectid'\n\nimport type { BaseJob } from '../config/types/workflowTypes.js'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\n/**\n * Our payload operations sanitize the input data to, for example, add missing IDs to array rows.\n * This function is used to manually sanitize the data for direct db adapter operations\n */\nexport function sanitizeUpdateData({ data }: { data: Partial<BaseJob> }): Partial<BaseJob> {\n if (data.log) {\n const sanitizedData = { ...data }\n sanitizedData.log = sanitizedData?.log?.map((log) => {\n if (log.id) {\n return log\n }\n return {\n ...log,\n id: new ObjectId().toHexString(),\n }\n })\n return sanitizedData\n }\n\n return data\n}\n"],"names":["ObjectIdImport","ObjectId","default","sanitizeUpdateData","data","log","sanitizedData","map","id","toHexString"],"mappings":"AAAA,OAAOA,oBAAoB,gBAAe;AAI1C,MAAMC,WAAYD,eAAeE,OAAO,IACtCF;AAEF;;;CAGC,GACD,OAAO,SAASG,mBAAmB,EAAEC,IAAI,EAA8B;IACrE,IAAIA,KAAKC,GAAG,EAAE;QACZ,MAAMC,gBAAgB;YAAE,GAAGF,IAAI;QAAC;QAChCE,cAAcD,GAAG,GAAGC,eAAeD,KAAKE,IAAI,CAACF;YAC3C,IAAIA,IAAIG,EAAE,EAAE;gBACV,OAAOH;YACT;YACA,OAAO;gBACL,GAAGA,GAAG;gBACNG,IAAI,IAAIP,WAAWQ,WAAW;YAChC;QACF;QACA,OAAOH;IACT;IAEA,OAAOF;AACT"}