package Ġcom . mir u ken . validate Ċ Ċ import Ġcom . mir u ken . Stage Ċ import Ġcom . mir u ken . callback .* Ċ import Ġcom . mir u ken . callback . policy . bindings . Member Binding Ċ import Ġcom . mir u ken . concurrent . Promise Ċ import Ġcom . mir u ken . concurrent . flatMap Ċ Ċ class ĠValidate Filter < in ĠC b : ĠAny , ĠRes : ĠAny ?> ĊĠĠĠ Ġ@ Provides Ġ@ Singleton Ġconstructor () Ġ: ĠFiltering < Cb , ĠRes > Ġ{ ĊĊĠĠĠ Ġoverride Ġvar Ġorder : ĠInt ? Ġ= ĠStage . VALIDATION ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġnext ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback : ĠĠĠ ĠC b , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Callback : ĠAny , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding : ĠĠĠĠ ĠMember Binding , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomposer : ĠĠĠ ĠHandling , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext : ĠĠĠĠĠĠĠ ĠNext < Res >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovider : ĠĠĠ ĠFiltering Provider ? ĊĠĠĠ Ġ) Ġ= Ġvalidate ( callback , Ġcomposer ) Ġflat Map Ġ{ ĊĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠ Ġ} Ġflat Map Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ== Ġnull Ġ-> ĠPromise . EMPTY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Response ( provider ) Ġ-> Ġvalidate ( it , Ġcomposer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠPromise . resolve ( it Ġas ĠAny ) ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠPromise < Res > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate ( target : ĠAny , Ġhandler : ĠHandling ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . validate Async ( target ) Ġthen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . isValid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠValidation Exception ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate Response ( provider : ĠFiltering Provider ?) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( provider Ġas ? ĠFilter Spec Provider )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . owner Ġas ? ĠValidate )?. validate Response ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfalse Ċ }