function comparePacketValue(left, right) {
if (typeof left === "number" && typeof right === "number") {
return d3.ascending(left, right);
}
if (Array.isArray(left) && Array.isArray(right)) {
const nl = left.length;
const nr = right.length;
let i = 0;
for (const n = Math.min(nl, nr); i < n; ++i) {
const c = comparePacketValue(left[i], right[i]);
if (c) return c;
}
return nl < nr ? -1 : nl > nr ? 1 : 0;
}
if (typeof left === "number" && Array.isArray(right)) {
return comparePacketValue([left], right);
}
if (Array.isArray(left) && typeof right === "number") {
return comparePacketValue(left, [right]);
}
throw new Error(`invalid comparison: ${left} vs. ${right}`);
}