Files
Termix/electron/sync-write-order.cjs
T

32 lines
967 B
JavaScript
Raw Normal View History

+17
2026-09-20 14:56:39 -05:00
// Sort writes per destination: response order is lost when both sides are merged.
function orderSyncWrites(entityType, writes) {
if (entityType !== "hosts") return writes;
const destinations = new Map();
for (const write of writes) {
if (!destinations.has(write.baseUrl)) {
destinations.set(write.baseUrl, new Map());
}
destinations.get(write.baseUrl).set(write.row.syncId, write);
}
const ordered = [];
const visited = new Set();
const visiting = new Set();
const visit = (write) => {
if (visited.has(write)) return;
if (visiting.has(write))
throw new Error("Cyclic parent host sync dependency");
visiting.add(write);
const parent = destinations
.get(write.baseUrl)
.get(write.row.parentHostSyncId);
if (parent) visit(parent);
visiting.delete(write);
visited.add(write);
ordered.push(write);
};
writes.forEach(visit);
return ordered;
}
module.exports = { orderSyncWrites };