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 🙏

© 2024 – Pkg Stats / Ryan Hefner

history-throttler

v1.1.0

Published

A simple fix for unwanted duplicate history entries on the frontend

Downloads

8

Readme

History Throttler

Build Package size JavaScript Style Guide Version Dependencies Status License

Accidentally pushing multiple new history items in quick succession is a common error in web apps. It breaks the history navigation and leads to frustrated users. History Throttler provides a simple fix for this issue.

Installation

npm install history-throttler

Usage

History Throttler exposes an alternative to the native history.pushState, that does the following.

  • It has the exact same arguments as history.pushState.

  • It calls history.pushState, if no new history item was added since the last repaint and the document is fully loaded.

  • It calls history.replaceState otherwise.

As a result it never pushes more than one history item between two repaints, but it keeps the history fresh all the time.

import pushState from 'history-throttler'

// this adds a new history item
pushState({ historyProp: 'value' }, 'title', 'url')
// this replaces the above item, instead of adding a new
pushState({ historyProp: 'otherValue' }, 'title2', 'url/2')

Quick fixing broken apps

Simply overwrite history.pushState to fix unwanted double-history-entry issues in your app.

import pushState from 'history-throttler'

history.pushState = pushState

This only works if your routing solution uses the HTML5 History API, it does not work with older hashbang based solutions.

Platform support

  • Chrome: 23 and above
  • Firefox: 24 and above
  • Safari: 7 and above
  • Opera: 15 and above
  • Edge: 12 and above
  • IE: 10 and above

Alternative builds

This library detects if you use ES6 or commonJS modules and serve the right format to you. The exposed bundles are transpiled to ES5 to support common tools - like UglifyJS minifying. If you would like a finer control over the provided build, you can specify them in your imports.

  • history-throttler/dist/es.es6.js exposes an ES6 build with ES6 modules.
  • history-throttler/dist/es.es5.js exposes an ES5 build with ES6 modules.
  • history-throttler/dist/cjs.es6.js exposes an ES6 build with commonJS modules.
  • history-throttler/dist/cjs.es5.js exposes an ES5 build with commonJS modules.

If you use a bundler, set up an alias for history-throttler to point to your desired build. You can learn how to do it with webpack here and with rollup here.

Contributing

Contributions are always welcome. Just send a PR against the master branch or open a new issue. Please make sure that the tests and the linter pass. Thanks!