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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@snowpact/redux-persist-immutable-expire

v1.0.0

Published

Create expiring storage for your Redux stores that uses Immutable

Readme

redux-persist-immutable-expire

Create expiring storage for your Redux stores that uses Immutable

npm

Expiring transformer for redux-persist – Create expiring storage for your Redux Immutable stores.

So you tried Redux Persist expire and it didn't work for your project because you're using Immutable ? You uses React Boiler Plate and you want to include an easy way to expire your reducers ?

Thanks @kamranahmedse for his really easy to use Redux Persist expire transformer. I tweaked his code to adapt his plugin for Immutable.

Installation

yarn add redux-persist-immutable-expire

Usage

Create a transform using expireReducer(reducerKey, config) where reducerKey is the reducer to which expiry is to be applied and configuration can be used to configure expire behavior.

const { persistReducer, persistStore } = require("redux-persist");
import immutableTransform from "redux-persist-transform-immutable";

// Import the transformer creator
const expireImmutableReducer = require("redux-persist-immutable-expire");

// Create persisted reducers using redux-persist
const persistedReducers = persistReducer(
  {
    transforms: [
      // Create a transformer by passing the reducer key and configuration. Values
      // shown below are the available configurations with default values
      expireImmutableReducer("preference", {
        // (Optional) Key to be used for the time relative to which store is to be expired
        persistedAtKey: "__persisted_at",
        // (Required) Seconds after which store will be expired
        expireSeconds: null,
        // (Optional) State to be used for resetting e.g. provide initial reducer state
        expiredState: {},
        // (Optional) Use it if you don't want to manually set the time in the reducer i.e. at `persistedAtKey`
        // and want the store to  be automatically expired if the record is not updated in the `expireSeconds` time
        autoExpire: false,
      }),
      // You can add more `expireReducer` calls here for different reducers
      immutableTransform(), // immutable transform needs to be after expireImmutableReducers
    ],
  },
  rootReducer
);

export const store = createStore(persistedReducers);
export const persist = persistStore(store);

Examples

Here is the configuration for the common usecases

Expire the item in store if it has not been updated for the past n seconds

// Reset `preference` key to empty object if it has not been updated for the past hour
expireImmutableReducer("preference", {
  expireSeconds: 3600,
});

Reset an item to empty array after it has not been updated for the past 30 minutes

// Reset `preference` key to given defaults if it has not been updated for the past hour
expireImmutableReducer("preference", {
  expireSeconds: 1800,
  expiredState: {
    viewType: "list",
    token: "",
  },
});

Expire the item in store after 30 minutes of loading it

// Reset `users` key to empty array if it had been loaded 30 minutes ago
expireImmutableReducer('users', {
    persistedAtKey: 'loadedAt',
    expireSeconds: 1800,
    expiredState: []        // Reset to empty array after expiry
})

// Note that in this case, you have to manually set the `loadedAt` in
// this case e.g. your reducer might look like this
...
case USERS_LOADED:
    return {
      loadedAt: moment(),  // or use (new Date()).toJSON()
      users: payload
    };
...

Feel free to open an issue if you need help with some specific usecase.

Contributions

  • Report issues with problems and suggestions
  • Open pull request with improvements

License

MIT © SnowPact