a i n O b j e c t f r o m ' . / u t i l s / i s P l a i n O b j e c t ' ; e x p o r t v a r A c t i o n T y p e s = { I N I T : ' @ @ r e d u x / I N I T ' } ; e x p o r t d e f a u l t f u n c t i o n c r e a t e S t o r e ( r e d u c e r , i n i t i a l S t a t e ) { i f ( t y p e o f r e d u c e r ! = = ' f u n c t i o n ' ) { t h r o w n e w E r r o r ( ' E x p e c t e d t h e r e d u c e r t o b e a f u n c t i o n . ' ) ; } v a r c u r r e n t R e d u c e r = r e d u c e r ; v a r c u r r e n t S t a t e = i n i t i a l S t a t e ; v a r l i s t e n e r s = [ ] ; v a r i s D i s p a t c h i n g = f a l s e ; f u n c t i o n g e t S t a t e ( ) { r e t u r n c u r r e n t S t a t e ; } f u n c t i o n s u b s c r i b e ( l i s t e n e r ) { l i s t e n e r s . p u s h ( l i s t e n e r ) ; v a r i s S u b s c r i b e d = t r u e ; r e t u r n f u n c t i o n u n s u b s c r i b e ( ) { i f ( ! i s S u b s c r i b e d ) r e t u r n ; i s S u b s c r i b e d = f a l s e ; v a r i n d e x = l i s t e n e r s . i n d e x O f ( l i s t e n e r ) ; l i s t e n e r s . s p l i c e ( i n d e x , 1 ) ; } ; } f u n c t i o n d i s p a t c h ( a c t i o n ) { i f ( ! i s P l a i n O b j e c t ( a c t i o n ) ) { t h r o w n e w E r r o r ( ' A c t i o n s m u s t b e p l a i n o b j e c t s . ' + ' U s e c u s t o m m i d d l e w a r e f o r a s y n c a c t i o n s . ' ) ; } i f ( t y p e o f a c t i o n . t y p e = = = ' u n d e f i n e d ' ) { t h r o w n e w E r r o r ( ' A c t i o n s m a y n o t h a v e a n u n d e f i n e d " t y p e " p r o p e r t y . ' + ' H a v e y o u m i s s p e l l e d a c o n s t a n t ? ' ) ; } i f ( i s D i s p a t c h i n g ) { t h r o w n e w E r r o r ( ' R e d u c e r s m a y n o t d i s p a t c h a c t i o n s . ' ) ; } t r y { i s D i s p a t c h i n g = t r u e ; c u r r e n t S t a t e = c u r r e n t R e d u c e r ( c u r r e n t S t a t e , a c t i o n ) ; } f i n a l l y { i s D i s p a t c h i n g = f a l s e ; } l i s t e n e r s . s l i c e ( ) . f o r E a c h ( l i s t e n e r = > l i s t e n e r ( ) ) ; r e t u r n a c t i o n ; } f u n c t i o n r e p l a c e R e d u c e r ( n e x t R e d u c e r ) { c u r r e n t R e d u c e r = n e x t R e d u c e r ; d i s p a t c h ( { t y p e : A c t i o n T y p e s . I N I T } ) ; } d i s p a t c h ( { t y p e : A c t i o n T y p e s . I N I T } ) ; r e t u r n { d i s p a t c h , s u b s c r i b e , g e t S t a t e , r e p l a c e R e d u c e r } ; }