1
+ 'use strict' ;
2
+
3
+ Object . defineProperty ( exports , "__esModule" , {
4
+ value : true
5
+ } ) ;
6
+
7
+ var _toConsumableArray2 = require ( 'babel-runtime/helpers/toConsumableArray' ) ;
8
+
9
+ var _toConsumableArray3 = _interopRequireDefault ( _toConsumableArray2 ) ;
10
+
11
+ var _getIterator2 = require ( 'babel-runtime/core-js/get-iterator' ) ;
12
+
13
+ var _getIterator3 = _interopRequireDefault ( _getIterator2 ) ;
14
+
15
+ var _pathToRegexp = require ( 'path-to-regexp' ) ;
16
+
17
+ var _pathToRegexp2 = _interopRequireDefault ( _pathToRegexp ) ;
18
+
19
+ function _interopRequireDefault ( obj ) { return obj && obj . __esModule ? obj : { default : obj } ; }
20
+
21
+ function subscribe ( history , dispatch ) {
22
+ for ( var _len = arguments . length , rules = Array ( _len > 2 ? _len - 2 : 0 ) , _key = 2 ; _key < _len ; _key ++ ) {
23
+ rules [ _key - 2 ] = arguments [ _key ] ;
24
+ }
25
+
26
+ var lastLocation = void 0 ;
27
+ var currentLocation = void 0 ;
28
+ var _unSubscribe = history . listen ( function ( newLocation ) {
29
+ lastLocation = currentLocation ;
30
+ currentLocation = newLocation ;
31
+ var _iteratorNormalCompletion = true ;
32
+ var _didIteratorError = false ;
33
+ var _iteratorError = undefined ;
34
+
35
+ try {
36
+ for ( var _iterator = ( 0 , _getIterator3 . default ) ( rules ) , _step ; ! ( _iteratorNormalCompletion = ( _step = _iterator . next ( ) ) . done ) ; _iteratorNormalCompletion = true ) {
37
+ var route = _step . value ;
38
+ var url = route . url ,
39
+ _route$queries = route . queries ,
40
+ queries = _route$queries === undefined ? [ ] : _route$queries ,
41
+ actionCreator = route . actionCreator ,
42
+ _route$everyTime = route . everyTime ,
43
+ everyTime = _route$everyTime === undefined ? false : _route$everyTime ;
44
+
45
+ var match = ( 0 , _pathToRegexp2 . default ) ( url ) . exec ( currentLocation . pathname ) ;
46
+ if ( ! match ) {
47
+ continue ;
48
+ }
49
+ var shouldExec = false ;
50
+
51
+ if ( everyTime || lastLocation === undefined ) {
52
+ shouldExec = true ;
53
+ } else {
54
+ var lastMatch = ( 0 , _pathToRegexp2 . default ) ( url ) . exec ( lastLocation . pathname ) ;
55
+ if ( ! lastMatch ) {
56
+ shouldExec = true ;
57
+ } else {
58
+ shouldExec = _diff ( match . slice ( 1 ) , lastMatch . slice ( 1 ) , currentLocation . query , lastLocation . query , queries ) ;
59
+ }
60
+ }
61
+ if ( shouldExec ) {
62
+ var queryResult = [ ] ;
63
+ var _iteratorNormalCompletion2 = true ;
64
+ var _didIteratorError2 = false ;
65
+ var _iteratorError2 = undefined ;
66
+
67
+ try {
68
+ for ( var _iterator2 = ( 0 , _getIterator3 . default ) ( queries ) , _step2 ; ! ( _iteratorNormalCompletion2 = ( _step2 = _iterator2 . next ( ) ) . done ) ; _iteratorNormalCompletion2 = true ) {
69
+ var query = _step2 . value ;
70
+
71
+ queryResult . push ( currentLocation . query [ query ] ) ;
72
+ }
73
+ } catch ( err ) {
74
+ _didIteratorError2 = true ;
75
+ _iteratorError2 = err ;
76
+ } finally {
77
+ try {
78
+ if ( ! _iteratorNormalCompletion2 && _iterator2 . return ) {
79
+ _iterator2 . return ( ) ;
80
+ }
81
+ } finally {
82
+ if ( _didIteratorError2 ) {
83
+ throw _iteratorError2 ;
84
+ }
85
+ }
86
+ }
87
+
88
+ var action = actionCreator && actionCreator . apply ( undefined , ( 0 , _toConsumableArray3 . default ) ( match . slice ( 1 ) ) . concat ( queryResult ) ) ;
89
+ if ( Array . isArray ( action ) ) {
90
+ var _iteratorNormalCompletion3 = true ;
91
+ var _didIteratorError3 = false ;
92
+ var _iteratorError3 = undefined ;
93
+
94
+ try {
95
+ for ( var _iterator3 = ( 0 , _getIterator3 . default ) ( action ) , _step3 ; ! ( _iteratorNormalCompletion3 = ( _step3 = _iterator3 . next ( ) ) . done ) ; _iteratorNormalCompletion3 = true ) {
96
+ var i = _step3 . value ;
97
+
98
+ dispatch ( i ) ;
99
+ }
100
+ } catch ( err ) {
101
+ _didIteratorError3 = true ;
102
+ _iteratorError3 = err ;
103
+ } finally {
104
+ try {
105
+ if ( ! _iteratorNormalCompletion3 && _iterator3 . return ) {
106
+ _iterator3 . return ( ) ;
107
+ }
108
+ } finally {
109
+ if ( _didIteratorError3 ) {
110
+ throw _iteratorError3 ;
111
+ }
112
+ }
113
+ }
114
+ } else {
115
+ dispatch ( action ) ;
116
+ }
117
+ }
118
+ }
119
+ } catch ( err ) {
120
+ _didIteratorError = true ;
121
+ _iteratorError = err ;
122
+ } finally {
123
+ try {
124
+ if ( ! _iteratorNormalCompletion && _iterator . return ) {
125
+ _iterator . return ( ) ;
126
+ }
127
+ } finally {
128
+ if ( _didIteratorError ) {
129
+ throw _iteratorError ;
130
+ }
131
+ }
132
+ }
133
+ } ) ;
134
+ var listen = function listen ( ) {
135
+ rules . push . apply ( rules , arguments ) ;
136
+ return ret ;
137
+ } ;
138
+ var ret = {
139
+ listen : listen ,
140
+ unListen : _unSubscribe
141
+ } ;
142
+ return ret ;
143
+ }
144
+
145
+ function _diff ( params , lastParams , query , lastQuery , targetQueries ) {
146
+ var _iteratorNormalCompletion4 = true ;
147
+ var _didIteratorError4 = false ;
148
+ var _iteratorError4 = undefined ;
149
+
150
+ try {
151
+ for ( var _iterator4 = ( 0 , _getIterator3 . default ) ( targetQueries ) , _step4 ; ! ( _iteratorNormalCompletion4 = ( _step4 = _iterator4 . next ( ) ) . done ) ; _iteratorNormalCompletion4 = true ) {
152
+ var queryName = _step4 . value ;
153
+
154
+ if ( query && query [ queryName ] !== lastQuery [ queryName ] ) {
155
+ return true ;
156
+ }
157
+ }
158
+ } catch ( err ) {
159
+ _didIteratorError4 = true ;
160
+ _iteratorError4 = err ;
161
+ } finally {
162
+ try {
163
+ if ( ! _iteratorNormalCompletion4 && _iterator4 . return ) {
164
+ _iterator4 . return ( ) ;
165
+ }
166
+ } finally {
167
+ if ( _didIteratorError4 ) {
168
+ throw _iteratorError4 ;
169
+ }
170
+ }
171
+ }
172
+
173
+ for ( var i = 0 ; i < params . length ; i ++ ) {
174
+ if ( params [ i ] !== lastParams [ i ] ) {
175
+ return true ;
176
+ }
177
+ }
178
+ return false ;
179
+ }
180
+
181
+ exports . default = subscribe ;
0 commit comments