1
+ 'use strict' ;
2
+
3
+ Object . defineProperty ( exports , '__esModule' , {
4
+ value : true
5
+ } ) ;
6
+
7
+ var _extends = Object . assign || function ( target ) { for ( var i = 1 ; i < arguments . length ; i ++ ) { var source = arguments [ i ] ; for ( var key in source ) { if ( Object . prototype . hasOwnProperty . call ( source , key ) ) { target [ key ] = source [ key ] ; } } } return target ; } ;
8
+
9
+ exports [ 'default' ] = persistState ;
10
+
11
+ function _interopRequireDefault ( obj ) { return obj && obj . __esModule ? obj : { 'default' : obj } ; }
12
+
13
+ var _createSlicerJs = require ( './createSlicer.js' ) ;
14
+
15
+ var _createSlicerJs2 = _interopRequireDefault ( _createSlicerJs ) ;
16
+
17
+ var _utilMergeStateJs = require ( './util/mergeState.js' ) ;
18
+
19
+ var _utilMergeStateJs2 = _interopRequireDefault ( _utilMergeStateJs ) ;
20
+
21
+ /**
22
+ * @description
23
+ * persistState is a Store Enhancer that syncs (a subset of) store state to localStorage.
24
+ *
25
+ * @param {String|String[] } [paths] Specify keys to sync with localStorage, if left undefined the whole store is persisted
26
+ * @param {Object } [config] Optional config object
27
+ * @param {String } [config.key="redux"] String used as localStorage key
28
+ * @param {Function } [config.slicer] (paths) => (state) => subset. A function that returns a subset
29
+ * of store state that should be persisted to localStorage
30
+ * @param {Function } [config.serialize=JSON.stringify] (subset) => serializedData. Called just before persisting to
31
+ * localStorage. Should transform the subset into a format that can be stored.
32
+ * @param {Function } [config.deserialize=JSON.parse] (persistedData) => subset. Called directly after retrieving
33
+ * persistedState from localStorage. Should transform the data into the format expected by your application
34
+ *
35
+ * @return {Function } An enhanced store
36
+ */
37
+
38
+ function persistState ( paths , config ) {
39
+ var cfg = _extends ( {
40
+ key : 'redux' ,
41
+ merge : _utilMergeStateJs2 [ 'default' ] ,
42
+ slicer : _createSlicerJs2 [ 'default' ] ,
43
+ serialize : JSON . stringify ,
44
+ deserialize : JSON . parse
45
+ } , config ) ;
46
+
47
+ var key = cfg . key ;
48
+ var merge = cfg . merge ;
49
+ var slicer = cfg . slicer ;
50
+ var serialize = cfg . serialize ;
51
+ var deserialize = cfg . deserialize ;
52
+
53
+ return function ( next ) {
54
+ return function ( reducer , initialState , enhancer ) {
55
+ if ( typeof initialState === 'function' && typeof enhancer === 'undefined' ) {
56
+ enhancer = initialState ;
57
+ initialState = undefined ;
58
+ }
59
+
60
+ var persistedState = undefined ;
61
+ var finalInitialState = undefined ;
62
+
63
+ try {
64
+ persistedState = deserialize ( localStorage . getItem ( key ) ) ;
65
+ finalInitialState = merge ( initialState , persistedState ) ;
66
+ } catch ( e ) {
67
+ console . warn ( 'Failed to retrieve initialize state from localStorage:' , e ) ;
68
+ }
69
+
70
+ var store = next ( reducer , finalInitialState , enhancer ) ;
71
+ var slicerFn = slicer ( paths ) ;
72
+
73
+ store . subscribe ( function ( ) {
74
+ var state = store . getState ( ) ;
75
+ var subset = slicerFn ( state ) ;
76
+
77
+ try {
78
+ localStorage . setItem ( key , serialize ( subset ) ) ;
79
+ } catch ( e ) {
80
+ console . warn ( 'Unable to persist state to localStorage:' , e ) ;
81
+ }
82
+ } ) ;
83
+
84
+ return store ;
85
+ } ;
86
+ } ;
87
+ }
88
+
89
+ module . exports = exports [ 'default' ] ;
0 commit comments