/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠK - OSS ĠDevelopment Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġio . github . ko ss . rand ux Ċ Ċ import Ġio . github . ko ss . rand ux . utils .* Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġstore Ġen h ancer Ġthat Ġapplies Ġmiddleware Ġto Ġthe Ġdispatch Ġmethod Ċ Ġ* Ġof Ġthe ĠRedux Ġstore . ĠThis Ġis Ġhandy Ġfor Ġa Ġvariety Ġof Ġtasks , Ġsuch Ġas Ġexpress ing Ċ Ġ* Ġasynchronous Ġactions Ġin Ġa Ġconcise Ġmanner , Ġor Ġlogging Ġevery Ġaction Ġpayload . Ċ Ġ* Ċ Ġ* ĠSee Ġ` redux - thunk ` Ġpackage Ġas Ġan Ġexample Ġof Ġthe ĠRedux Ġmiddleware . Ċ Ġ* Ċ Ġ* ĠBecause Ġmiddleware Ġis Ġpotentially Ġasynchronous , Ġthis Ġshould Ġbe Ġthe Ġfirst Ċ Ġ* Ġstore Ġen h ancer Ġin Ġthe Ġcomposition Ġchain . Ċ Ġ* Ċ Ġ* ĠNote Ġthat Ġeach Ġmiddleware Ġwill Ġbe Ġgiven Ġthe Ġ` dispatch ` Ġand Ġ` getState ` Ġfunctions Ċ Ġ* Ġas Ġnamed Ġarguments . Ċ Ġ* Ċ Ġ* Ġ@ param Ġ[ Middleware ] Ġmiddle wares ĠThe Ġmiddleware Ġchain Ġto Ġbe Ġapplied . Ċ Ġ* Ġ@ returns Ġ[ Store Enh ancer ] ĠA Ġstore Ġen h ancer Ġapplying Ġthe Ġmiddleware . Ċ Ġ*/ Ċ fun Ġapply Middleware ( var arg Ġmiddle wares : ĠMiddleware ): ĠStore Enh ancer Ġ= ĊĠĠĠĠĠĠĠ Ġ{ Ġcreate Store : ĠStore Creator Ġ-> Ġinner @ Ġ{ Ġreducer : ĠRed ucer , ĠinitialState : ĠState ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstore Ġ= Ġcreate Store ( reducer , ĠinitialState ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdispatch : ĠDispatch Ġ= Ġ{ Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Dispatch ing Ġwhile Ġconstructing Ġyour Ġmiddleware Ġis Ġnot Ġallowed ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Other Ġmiddleware Ġwould Ġnot Ġbe Ġapplied Ġto Ġthis Ġdispatch ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġchain : ĠArray <( Dispatch ) Ġ-> ĠDispatch > Ġ= Ġempty Array () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapi Ġ= ĠMiddleware API ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetState Ġ= Ġstore :: getState , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Ġ= Ġ{ Ġaction : ĠAction Ġ-> Ġdispatch ( action ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchain Ġ= Ġmiddle wares . map Ġ{ Ġmiddleware Ġ-> Ġmiddleware ( api ) Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Ġ= Ġcompose (* chain )( store . dispatch ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ inner Ġstore Ġoverride Ġdispatch ĊĠĠĠ Ġ}} Ċ Ċ // ĠK OT LIN ĠFUNCTIONS ĠFOR ĠCOMP AT IBILITY Ġ------------------------------------------------ -------------- Ċ Ċ /** Ċ Ġ* ĠFunction Ġm im ick ing Ġthe Ġbehaviour Ġof Ġcompose . js , Ġhowever Ġis Ġslightly Ġmore Ġspecific Ġin Ġterms Ġof Ġtypes Ċ Ġ* Ġand Ġfunction Ġarguments Ġto Ġsupport Ġrunning Ġon Ġthe ĠJVM Ċ Ġ*/ Ċ fun Ġcompose ( var arg Ġfuncs : Ġ( Dispatch ) Ġ-> ĠDispatch ): Ġ( Dispatch ) Ġ-> ĠDispatch Ġ{ ĊĠĠĠ Ġif Ġ( funcs . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ Ġarg Ġ-> Ġarg Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( funcs . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfuncs [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġfuncs . reduce Ġ{ a , Ġb Ġ-> Ġ{ Ġd : ĠDispatch Ġ-> Ġa ( b ( d )) }} Ċ } Ċ Ċ /** Ċ Ġ* ĠOverrides Ġthe Ġdispatch Ġfunction Ġon Ġa Ġstore Ġvia Ġdeleg ation Ċ Ġ*/ Ċ infix Ġfun ĠStore . override ( dispatch : ĠDispatch ): ĠStore Ġ= ĊĠĠĠĠĠĠĠ Ġobject : ĠStore Ġby Ġthis Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdispatch Ġ= Ġdispatch ĊĠĠĠ Ġ} Ċ