function trending()

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),
      ]);
    },