in packages/sqrl-redis-functions/src/CountFunctions.ts [336:377]
function trending(state: CompileState, ast: CustomCallAst): Ast {
const args: TrendingArguments = parse(ast.source, {
startRule: "TrendingArguments",
});
const { timespan } = args;
sqrlInvariant(
ast,
timespan.type === "dayOverDay" ||
timespan.type === "weekOverWeek" ||
timespan.type === "dayOverFullWeek",
"Invalid timespan for trending. Expecting `DAY OVER DAY` or `WEEK OVER WEEK` or `DAY OVER FULL WEEK`"
);
const trendingConfig = TRENDING_CONFIG[timespan.type];
const currentCountArgs: CountArguments = {
features: args.features,
sumFeature: null,
timespan: trendingConfig.current,
where: args.where,
};
const currentCountAst = databaseCountTransform(
state,
ast,
currentCountArgs
);
const currentAndPreviousCountAst = databaseCountTransform(state, ast, {
...currentCountArgs,
timespan: trendingConfig.currentAndPrevious,
});
const { keysAst } = interpretCountArgs(state, ast, currentCountArgs);
return AstBuilder.call("_fetchTrendingDetails", [
keysAst,
currentCountAst,
currentAndPreviousCountAst,
AstBuilder.constant(args.minEvents),
]);
},