Files
Stirling-PDF/shared-operations/src/workflow/organizeWaitOperations.ts

52 lines
1.6 KiB
TypeScript
Raw Normal View History

import { Action } from "../../declarations/Action";
import { PdfFile } from "../wrappers/PdfFile";
2023-11-10 21:08:07 +03:00
export function organizeWaitOperations(actions: Action[]) {
2023-10-17 01:31:00 +02:00
// Initialize an object to store the counts and associated "done" operations
const waitCounts: {[key: string]: number} = {};
const doneOperations: {[key: string]: Action} = {};
2023-10-17 01:31:00 +02:00
// Function to count "type: wait" operations and associate "done" operations per id
function countWaitOperationsAndDone(actions: Action[]) {
for (const action of actions) {
if (action.type === "wait") {
const id = action.values.id;
2023-10-17 01:31:00 +02:00
if (id in waitCounts) {
waitCounts[id]++;
} else {
waitCounts[id] = 1;
}
}
if (action.type === "done") {
const id = action.values.id;
doneOperations[id] = action;
2023-10-17 01:31:00 +02:00
}
if (action.actions) {
countWaitOperationsAndDone(action.actions);
2023-10-17 01:31:00 +02:00
}
}
}
// Start counting and associating from the root operations
countWaitOperationsAndDone(actions);
2023-10-17 01:31:00 +02:00
// Combine counts and associated "done" operations
const result: ResultType = {};
2023-10-17 01:31:00 +02:00
for (const id in waitCounts) {
result[id] = {
waitCount: waitCounts[id],
doneOperation: doneOperations[id],
input: []
};
}
return result;
}
export type ResultType = {
[key: string]: {
waitCount: number,
doneOperation: Action,
input: PdfFile[]
}
}