93 lines
2.4 KiB
JavaScript
93 lines
2.4 KiB
JavaScript
"use strict";
|
|
|
|
const { getAbbreviatedMimeType,
|
|
getUriNameWithQuery,
|
|
getUriHostPort,
|
|
loadCauseString } = require("./request-utils");
|
|
|
|
/**
|
|
* Predicates used when sorting items.
|
|
*
|
|
* @param object first
|
|
* The first item used in the comparison.
|
|
* @param object second
|
|
* The second item used in the comparison.
|
|
* @return number
|
|
* <0 to sort first to a lower index than second
|
|
* =0 to leave first and second unchanged with respect to each other
|
|
* >0 to sort second to a lower index than first
|
|
*/
|
|
|
|
function waterfall(first, second) {
|
|
return first.startedMillis - second.startedMillis;
|
|
}
|
|
|
|
function status(first, second) {
|
|
return first.status == second.status
|
|
? first.startedMillis - second.startedMillis
|
|
: first.status - second.status;
|
|
}
|
|
|
|
function method(first, second) {
|
|
if (first.method == second.method) {
|
|
return first.startedMillis - second.startedMillis;
|
|
}
|
|
return first.method > second.method ? 1 : -1;
|
|
}
|
|
|
|
function file(first, second) {
|
|
let firstUrl = getUriNameWithQuery(first.url).toLowerCase();
|
|
let secondUrl = getUriNameWithQuery(second.url).toLowerCase();
|
|
if (firstUrl == secondUrl) {
|
|
return first.startedMillis - second.startedMillis;
|
|
}
|
|
return firstUrl > secondUrl ? 1 : -1;
|
|
}
|
|
|
|
function domain(first, second) {
|
|
let firstDomain = getUriHostPort(first.url).toLowerCase();
|
|
let secondDomain = getUriHostPort(second.url).toLowerCase();
|
|
if (firstDomain == secondDomain) {
|
|
return first.startedMillis - second.startedMillis;
|
|
}
|
|
return firstDomain > secondDomain ? 1 : -1;
|
|
}
|
|
|
|
function cause(first, second) {
|
|
let firstCause = loadCauseString(first.cause.type);
|
|
let secondCause = loadCauseString(second.cause.type);
|
|
if (firstCause == secondCause) {
|
|
return first.startedMillis - second.startedMillis;
|
|
}
|
|
return firstCause > secondCause ? 1 : -1;
|
|
}
|
|
|
|
function type(first, second) {
|
|
let firstType = getAbbreviatedMimeType(first.mimeType).toLowerCase();
|
|
let secondType = getAbbreviatedMimeType(second.mimeType).toLowerCase();
|
|
if (firstType == secondType) {
|
|
return first.startedMillis - second.startedMillis;
|
|
}
|
|
return firstType > secondType ? 1 : -1;
|
|
}
|
|
|
|
function transferred(first, second) {
|
|
return first.transferredSize - second.transferredSize;
|
|
}
|
|
|
|
function size(first, second) {
|
|
return first.contentSize - second.contentSize;
|
|
}
|
|
|
|
exports.Sorters = {
|
|
status,
|
|
method,
|
|
file,
|
|
domain,
|
|
cause,
|
|
type,
|
|
transferred,
|
|
size,
|
|
waterfall,
|
|
};
|