in packages/sqrl-redis-functions/src/CountFunctions.ts [284:328]
async function _fetchTrendingDetails(
state,
keys,
currentCounts,
currentAndPreviousCounts,
minEvents
) {
if (!currentCounts || !currentAndPreviousCounts) {
return [];
}
invariant(
currentCounts.length === currentAndPreviousCounts.length &&
currentCounts.length === keys.length,
"Mismatched current/previous trending counts."
);
const rv = [];
currentCounts.forEach((currentCount, i) => {
const currentAndPreviousCount = currentAndPreviousCounts[i];
if (
currentCount === null ||
currentCount < minEvents ||
currentAndPreviousCount === null ||
currentAndPreviousCount < currentCount
) {
return;
}
const key = keys[i];
invariant(key !== null, "Received null key for current count.");
const previousCount = currentAndPreviousCount - currentCount;
const magnitude = Math.log10(currentCount / Math.max(previousCount, 1));
if (magnitude >= 1) {
rv.push({
key: key.featureValues,
current: currentCount,
previous: previousCount,
delta: 2 * currentCount - currentAndPreviousCount,
magnitude,
});
}
});
return rv;
},