@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
39 lines (37 loc) • 1.51 kB
JavaScript
import { getFlowManager } from "../../flows.js";
import { optionToObject } from "@directus/utils";
import { omit } from "lodash-es";
import { defineOperationApi } from "@directus/extensions";
//#region src/operations/trigger/index.ts
var trigger_default = defineOperationApi({
id: "trigger",
handler: async ({ flow, payload, iterationMode, batchSize }, context) => {
const flowManager = getFlowManager();
const payloadObject = optionToObject(payload) ?? null;
if (Array.isArray(payloadObject)) {
if (iterationMode === "serial") {
const result = [];
for (const payload$1 of payloadObject) result.push(await flowManager.runOperationFlow(flow, payload$1, omit(context, "data")));
return result;
}
if (iterationMode === "batch") {
const size = batchSize ?? 10;
const result = [];
for (let i = 0; i < payloadObject.length; i += size) {
const batch = payloadObject.slice(i, i + size);
const batchResults = await Promise.all(batch.map((payload$1) => {
return flowManager.runOperationFlow(flow, payload$1, omit(context, "data"));
}));
result.push(...batchResults);
}
return result;
}
if (iterationMode === "parallel" || !iterationMode) return await Promise.all(payloadObject.map((payload$1) => {
return flowManager.runOperationFlow(flow, payload$1, omit(context, "data"));
}));
}
return await flowManager.runOperationFlow(flow, payloadObject, omit(context, "data"));
}
});
//#endregion
export { trigger_default as default };