GithubHelp home page GithubHelp logo

farskid / localstorage-watcher Goto Github PK

View Code? Open in Web Editor NEW
1.0 3.0 0.0 5 KB

A watcher for localStorage changes

JavaScript 75.51% HTML 24.49%
localstorage watch watches localstorage-changes storage

localstorage-watcher's Introduction

LocalStorage watcher

Watch changes in browser localStorage

Installation

Simply run npm install localstorage-watcher --save or clone the repository.

Usage

The whole system works on storageWatcher global variable.

Methods and Properties

  • settings private property, an object that holds default settings. Default settings are:
    1. duration defaults to 1500ms or 1.5 seconds
    2. logType defaults to "info" which logger will use to run console.info. Other options are error, log, table, warn
    3. verbose defaults to true that will allow logger to log changes, difference of storageWatcher.lastStorage and window.localStorage. To turn logger off, change this to false
  • configure public method, this method configures settings.
  • start public method, starts the watcher
  • stop public method, stops the watcher
  • lastStorage public property, holds last storage object before recent change

Using methods

  var watcher = storageWatcher;

  // Configure watcher
  watcher.configure({
  	verbose: true, // (Bool) Default: true
  	duration: 3000, // (Integer) Default: 1500
  	logType: 'warn' // (String) Default: 'info'
  })

  // Start watcher
  watcher.start();

  // add to storage to see the watcher's behavior
  localStorage.setItem('testKey', 'testValue');

  // on next watch cycle, the watcher will log the change and the difference of watcher.lastStorage and window.localStorage

  // Stop watcher
  watcher.stop()

  // Get the last saved storage
  watcher.lastStorage

Example

In the example folder, open index.html in browser and you will see a logger system similar to your browser console and bunch of useful buttons.

localstorage-watcher's People

Contributors

farskid avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

localstorage-watcher's Issues

v2 RFC

window.localStorage.clear()

function getEntries(obj) {
  return Object.entries(obj);
}

const toHashMap = entries => entries.reduce((t, c) => {
  return {
    ...t,
    [c[0]]: c[1]
  }
}, {});

const hash = obj => encode(JSON.stringify(obj))

const encode = btoa;
const decode = atob;

function storageWatcher(duration = 1000, onChange = () => {}) {
  let lastHash = hash(window.localStorage),
    id;

  const hasChanged = () => hash(window.localStorage) !== lastHash;


  const check = () => {
    if (hasChanged()) {
      const entries = getEntries(window.localStorage);
      const hashMap = toHashMap(entries)
      lastHash = hash(window.localStorage);
      onChange(hashMap)
    }
  }

  return {
    start() {
      console.log('started')
      id = setInterval(check, duration);
    },
    stop() {
      console.log('stopped')
      clearInterval(id);
    }
  }
}


let w = storageWatcher(1000, storage => {
  console.log(`local storage changed`, storage)
});

w.start()



window.localStorage.setItem('a', 1);

setTimeout(() => window.localStorage.setItem('b', 2), 500);

setTimeout(() => window.localStorage.setItem('c', 3), 1500);

setTimeout(() => window.localStorage.removeItem('b'), 2500);

setTimeout(() => {
  window.localStorage.removeItem('a')
  window.localStorage.removeItem('c')

  window.localStorage.setItem('c', 3)
  window.localStorage.setItem('a', 1);

}, 1500);

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.