Socket
Socket
Sign inDemoInstall

ngrx-store-localstorage

Package Overview
Dependencies
Maintainers
1
Versions
49
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ngrx-store-localstorage - npm Package Compare versions

Comparing version 0.0.7 to 0.0.8

4

dist/index.d.ts

@@ -1,3 +0,1 @@

import { Provider } from '@angular/core';
import 'rxjs/add/operator/do';
export declare const localStorageMiddleware: (keys: string[], rehydrateState?: boolean) => Provider[];
export declare const localStorageSync: (keys: string[], rehydrate?: boolean) => (reducer: any) => (state: {}, action: any) => any;
"use strict";
var core_1 = require('@angular/core');
require('rxjs/add/operator/do');
var store_1 = require('@ngrx/store');
var _this = this;
var detectDate = /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})/;
//correctly parse dates from local storage
var parseWithDates = function (jsonData) {
return JSON.parse(jsonData, function (key, value) {
if (typeof value === 'string' && (_this.detectDate.test(value))) {
return new Date(value);
}
return value;
});
};
var validateStateKeys = function (keys) {
return keys.map(function (key) {
if (typeof (key) !== 'string') {
throw new TypeError("localStorageMiddleware Unknown Parameter Type: "
throw new TypeError("localStorageSync Unknown Parameter Type: "
+ ("Expected type of string, got " + typeof key));

@@ -15,3 +23,3 @@ }

var rehydrateApplicationState = function (keys) {
var rehydratedState = keys.reduce(function (acc, curr) {
return keys.reduce(function (acc, curr) {
var stateSlice = localStorage.getItem(curr);

@@ -24,27 +32,28 @@ if (stateSlice) {

}, {});
return core_1.provide(store_1.INITIAL_STATE, { useValue: rehydratedState });
};
var createLocalStorageMiddleware = function (keys) {
var stateKeys = validateStateKeys(keys);
return function (obs) {
return obs.do(function (state) {
stateKeys.forEach(function (key) {
var stateSlice = state[key];
if (typeof (stateSlice) !== 'undefined') {
localStorage.setItem(key, JSON.stringify(state[key]));
}
});
});
var syncStateUpdate = function (state, keys) {
keys.forEach(function (key) {
var stateSlice = state[key];
if (typeof (stateSlice) !== 'undefined') {
try {
localStorage.setItem(key, JSON.stringify(state[key]));
}
catch (e) {
console.warn('Unable to save state to localStorage:', e);
}
}
});
};
exports.localStorageSync = function (keys, rehydrate) {
if (rehydrate === void 0) { rehydrate = false; }
return function (reducer) {
var stateKeys = validateStateKeys(keys);
var rehydratedState = rehydrate ? rehydrateApplicationState(stateKeys) : undefined;
return function (state, action) {
if (state === void 0) { state = rehydratedState; }
var nextState = reducer(state, action);
syncStateUpdate(nextState, stateKeys);
return nextState;
};
};
};
exports.localStorageMiddleware = function (keys, rehydrateState) {
if (rehydrateState === void 0) { rehydrateState = false; }
var middleware = createLocalStorageMiddleware(keys);
var localStorageProvider = core_1.provide(store_1.POST_MIDDLEWARE, {
multi: true,
useValue: middleware
});
return rehydrateState
? [localStorageProvider, rehydrateApplicationState(keys)]
: [localStorageProvider];
};
{
"name": "ngrx-store-localstorage",
"version": "0.0.7",
"version": "0.0.8",
"description": "State and local storage syncing for @ngrx/store",

@@ -31,3 +31,3 @@ "main": "./dist/index.js",

"@angular/core": "2.0.0-rc.1",
"@ngrx/store": "^1.5.0"
"@ngrx/store": "^2.0.0"
},

@@ -34,0 +34,0 @@ "devDependencies": {

@@ -11,17 +11,21 @@ # ngrx-store-localstorage

```
1. Configure your ngrx store as normal using `provideStore`.
2. Using the provided `localStorageMiddleware` function, specify the slices of state you would like to keep synced with local storage.
1. Import `compose` and `combineReducers` from `@ngrx/store`
2. Invoke the `localStorageSync` function after `combineReducers`, specifying the slices of state you would like to keep synced with local storage.
3. Optionally specify whether to rehydrate this state from local storage as `initialState` on application bootstrap.
4. Invoke composed function with application reducers as an argument to `provideStore`.
```ts
import {bootstrap} from 'angular2/platform/browser';
import {bootstrap} from '@angular/platform-browser-dynamic';
import {TodoApp} from './todo-app';
import {provideStore} from "@ngrx/store";
import {localStorageMiddleware} from "ngrx-store-localstorage";
import {provideStore, compose} from "@ngrx/store";
import {localStorageSync} from "ngrx-store-localstorage";
export function main() {
return bootstrap(TodoApp, [
provideStore({todos, visibilityFilter}),
localStorageMiddleware(['todos', 'visibilityFilter'], true)
provideStore(
compose(
localStorageSync(['todos']),
combineReducers
)({todos, visibilityFilter})
)
])

@@ -35,4 +39,5 @@ .catch(err => console.error(err));

## API
### `localStorageMiddleware(keys : string[], rehydrateState : boolean = false)`
### `localStorageSync(keys : string[], rehydrateState : boolean = false) : Reducer`
Provide state (reducer) keys to sync with local storage. Optionally specify whether to rehydrate `initialState` from local storage on bootstrap.
*Returns a meta-reducer*

@@ -39,0 +44,0 @@ #### Arguments

@@ -1,6 +0,13 @@

import {provide, Provider} from '@angular/core';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/do';
import {POST_MIDDLEWARE, INITIAL_STATE} from '@ngrx/store';
const detectDate = /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})/;
//correctly parse dates from local storage
const parseWithDates = (jsonData: string) => {
return JSON.parse(jsonData, (key: any, value: any) => {
if (typeof value === 'string' && (this.detectDate.test(value))) {
return new Date(value);
}
return value;
});
};
const validateStateKeys = (keys: string[]) => {

@@ -10,3 +17,3 @@ return keys.map(key => {

throw new TypeError(
`localStorageMiddleware Unknown Parameter Type: `
`localStorageSync Unknown Parameter Type: `
+ `Expected type of string, got ${typeof key}`

@@ -20,3 +27,3 @@ );

const rehydrateApplicationState = (keys: string[]) => {
let rehydratedState = keys.reduce((acc, curr) => {
return keys.reduce((acc, curr) => {
let stateSlice = localStorage.getItem(curr);

@@ -28,30 +35,26 @@ if(stateSlice){

}, {});
};
return provide(INITIAL_STATE, { useValue: rehydratedState });
const syncStateUpdate = (state : any, keys : string[]) => {
keys.forEach(key => {
let stateSlice = state[key];
if (typeof(stateSlice) !== 'undefined') {
try{
localStorage.setItem(key, JSON.stringify(state[key]));
} catch(e){
console.warn('Unable to save state to localStorage:', e);
}
}
});
};
const createLocalStorageMiddleware = (keys : string[]) => {
export const localStorageSync = (keys : string[], rehydrate : boolean = false) => (reducer : any) => {
const stateKeys = validateStateKeys(keys);
return (obs:Observable<any>) => {
return obs.do(state => {
stateKeys.forEach(key => {
let stateSlice = state[key];
if (typeof(stateSlice) !== 'undefined') {
localStorage.setItem(key, JSON.stringify(state[key]));
}
});
});
}
};
const rehydratedState = rehydrate ? rehydrateApplicationState(stateKeys) : undefined;
export const localStorageMiddleware = (keys : string[], rehydrateState : boolean = false) => {
const middleware = createLocalStorageMiddleware(keys);
const localStorageProvider = provide(POST_MIDDLEWARE, {
multi: true,
useValue: middleware
});
return rehydrateState
? [localStorageProvider, rehydrateApplicationState(keys)]
: [localStorageProvider]
return function(state = rehydratedState, action : any){
const nextState = reducer(state, action);
syncStateUpdate(nextState, stateKeys);
return nextState;
};
};
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc