Skip to content

Commit

Permalink
Merge pull request #2778 from TAMULib/dedupe-patch-operations
Browse files Browse the repository at this point in the history
Dedupe patch operations by op and path
  • Loading branch information
alanorth authored Feb 1, 2024
2 parents 85369aa + f40639d commit 5a42f39
Showing 1 changed file with 22 additions and 1 deletion.
23 changes: 22 additions & 1 deletion src/app/core/json-patch/json-patch-operations.reducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,28 @@ function addOperationToList(body: JsonPatchOperationObject[], actionType, target
newBody.push(makeOperationEntry({ op: JsonPatchOperationType.move, from: fromPath, path: targetPath }));
break;
}
return newBody;
return dedupeOperationEntries(newBody);
}

/**
* Dedupe operation entries by op and path. This prevents processing unnecessary patches in a single PATCH request.
*
* @param body JSON patch operation object entries
* @returns deduped JSON patch operation object entries
*/
function dedupeOperationEntries(body: JsonPatchOperationObject[]): JsonPatchOperationObject[] {
const ops = new Map<string, any>();
for (let i = body.length - 1; i >= 0; i--) {
const patch = body[i].operation;
const key = `${patch.op}-${patch.path}`;
if (!ops.has(key)) {
ops.set(key, patch);
} else {
body.splice(i, 1);
}
}

return body;
}

function makeOperationEntry(operation) {
Expand Down

0 comments on commit 5a42f39

Please sign in to comment.