Backend · Dados

Paginação por Cursor

Paginação keyset com cursor opaco e assinado (HMAC) e trecho SQL parametrizado pronto. Listas de pedidos e logs rápidas em qualquer página, sem OFFSET e sem item repetido.

Paginação · SQL · Cursor · 8 testes automatizados · Licença MIT · Criado por FlowCore Soluções LTDA

Como instalar

  1. Funciona onde você já roda Node 18+, Cloudflare Workers, Deno, Bun, Vercel e Netlify Functions. Zero dependência: só fetch e Web Crypto, que já vêm no runtime.
  2. Crie src/lib/paginacao-cursor.ts Cole o código da aba Código.
  3. Use
    const limite = normalizarLimite(url.searchParams.get("limite"));
    const cursor = url.searchParams.get("cursor");
    const f = montarFiltroKeyset(cursor ? await decodificarCursor(cursor, env.CURSOR_SECRET) : null, { colunas: ["created_at", "id"] });
    const linhas = await db.query(`SELECT * FROM pedidos ${f.sql ? "WHERE " + f.sql : ""} ORDER BY ${f.orderBy} LIMIT ${limite + 1}`, f.params);
    return Response.json(await montarPagina(linhas, limite, (p) => [p.created_at, p.id], env.CURSOR_SECRET));
  4. Rode o teste junto O arquivo de teste (aba Teste) cobre 8 cenários. Copie para src/lib/ ao lado e rode:
    npm install -D vitest
    npx vitest run src/lib

Código no GitHub · Biblioteca de códigos

Mais em Dados