npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

sequelize-cursor-pagination-lite

v1.0.2

Published

Minimal and efficient cursor-based pagination utility for Sequelize models without extra count queries.

Readme

sequelize-cursor-pagination-lite

A lightweight, performant cursor-based pagination utility for Sequelize ORM. Built for speed and simplicity with optional features to minimize unnecessary database queries.

Features

  • 🚀 Fast & Lightweight - Minimal overhead with optional features
  • 🎯 Cursor-based pagination - Reliable pagination that works with real-time data
  • 🔧 Highly configurable - All features are optional to save queries
  • 📦 Zero dependencies - Works with your existing Sequelize setup

Installation

npm install sequelize-cursor-pagination-lite

Quick Start


const { makeFindAllPaginated } = require('sequelize-cursor-pagination-lite');

// Define your model
const User = sequelize.define('User', {
  email: {
    type: DataTypes.STRING,
    allowNull: false
  },
  active: {
    type: DataTypes.BOOLEAN,
    defaultValue: true
  }
});

// Attach paginated method to your model
User.findAllPaginated = makeFindAllPaginated(User);

// Now use it like any other Sequelize method
const result = await User.findAllPaginated({
  limit: 10,
  where: { active: true }
});

console.log(result.records); // Array of user records
console.log(result.cursors); // { before: "cursor", after: "cursor" }

API Reference

makeFindAllPaginated(model)

Attaches a findAllPaginated method to your Sequelize model, giving you cursor-based pagination alongside the familiar findAll interface.

Parameters:

  • model - Sequelize model instance

Usage:

// Attach to your model
User.findAllPaginated = makeFindAllPaginated(User);

// Use like any other Sequelize method
const result = await User.findAllPaginated(options);

Pagination Options

const result = await User.findAllPaginated({
  where: {},              // Sequelize where clause (optional)
  limit: 10,              // Number of records per page (default: 10)
  after: 'cursor',        // Cursor for forward pagination (optional)
  before: 'cursor',       // Cursor for backward pagination (optional)
  order: [['id', 'ASC']], // Sort order (default: [['id', 'ASC']])
  includePageInfo: false, // Include hasNextPage/hasPrevPage (default: false)
  includeTotalCount: false // Include total count (default: false)
});

Response Format

{
  records: [...],           // Array of model instances
  edges: {                  // First and last records
    first: record,
    last: record
  },
  cursors: {               // Navigation cursors
    before: 'cursor',
    after: 'cursor'
  },
  pageInfo: {              // Optional: only if includePageInfo: true
    hasPrevPage: boolean,
    hasNextPage: boolean
  },
  totalCount: number       // Optional: only if includeTotalCount: true
}

Performance Considerations

Optional Features Save Queries

  • Basic usage: Single Query (findAll)
  • With includePageInfo: false: Saves 2 additional queries with limit 1 for page checks
  • With includeTotalCount: false: Saves 1 count query

Best Practices

  1. Use indexed sort fields - Ensure your order field has a database index
  2. Limit page sizes - Keep limit reasonable (10-100 records)
  3. Enable features only when needed - Use includePageInfo and includeTotalCount sparingly
  4. Cache cursors - Store cursors in URL params or session for navigation

Requirements

  • Node.js >= 12
  • Sequelize >= 6.0

License

MIT

Contributing

Contributions welcome! Please read our contributing guide and submit pull requests to our repository.


Built for developers who need fast, reliable pagination without the bloat.