/**
* Sorts HTTP request records for backward compatibility with default values.
*
* @param {Array<Object>} requests An array of HTTP request records.
* @returns {Array<Object>} The sorted array of HTTP request records.
*/
function sortRequestsForCompatibility(requests) {
if (!Array.isArray(requests)) {
return []; // Handle invalid input
}
// Sort by method, then by URL, then by headers (for consistency).
requests.sort((a, b) => {
const methodComparison = a.method.localeCompare(b.method); // Case-sensitive comparison
if (methodComparison !== 0) {
return methodComparison;
}
const urlComparison = a.url.localeCompare(b.url); // Case-sensitive comparison
if (urlComparison !== 0) {
return urlComparison;
}
// If method and URL are the same, compare headers.
// This ensures consistent ordering when default values are applied.
const headerComparison = Object.keys(a.headers)
.sort() // Sort keys alphabetically
.reduce((diff, headerName) => {
const headerA = a.headers[headerName] || '';
const headerB = b.headers[headerName] || '';
if (headerA.localeCompare(headerB) !== 0) {
return headerA.localeCompare(headerB);
}
return diff;
}, 0);
return headerComparison;
});
return requests;
}
Add your comment