@@ -142,8 +142,7 @@ export class MultiProvider implements Provider {
142142 throw new GeneralError ( 'Hook context not available for evaluation' ) ;
143143 }
144144
145- const tasks : Promise < boolean > [ ] = [ ] ;
146- const resolutions : ProviderResolutionResult < T > [ ] = [ ] ;
145+ const tasks : Promise < [ boolean , ProviderResolutionResult < T > | null ] > [ ] = [ ] ;
147146
148147 for ( const providerEntry of this . providerEntries ) {
149148 const task = this . evaluateProviderEntry (
@@ -154,22 +153,22 @@ export class MultiProvider implements Provider {
154153 hookContext ,
155154 hookHints ,
156155 context ,
157- resolutions ,
158156 ) ;
159157
158+ tasks . push ( task ) ;
159+
160160 if ( this . evaluationStrategy . runMode === 'sequential' ) {
161- const shouldEvaluateNext = await task ;
161+ const [ shouldEvaluateNext ] = await task ;
162162 if ( ! shouldEvaluateNext ) {
163163 break ;
164164 }
165165 }
166-
167- tasks . push ( task ) ;
168166 }
169167
170- if ( this . evaluationStrategy . runMode === 'parallel' ) {
171- await Promise . all ( tasks ) ;
172- }
168+ const results = await Promise . all ( tasks ) ;
169+ const resolutions = results
170+ . map ( ( [ _ , resolution ] ) => resolution )
171+ . filter ( ( r ) : r is ProviderResolutionResult < T > => Boolean ( r ) ) ;
173172
174173 const finalResult = this . evaluationStrategy . determineFinalResult ( { flagKey, flagType } , context , resolutions ) ;
175174
@@ -192,8 +191,7 @@ export class MultiProvider implements Provider {
192191 hookContext : HookContext ,
193192 hookHints : HookHints ,
194193 context : EvaluationContext ,
195- resolutions : ProviderResolutionResult < T > [ ] ,
196- ) {
194+ ) : Promise < [ boolean , ProviderResolutionResult < T > | null ] > {
197195 let thrownError : unknown ;
198196 let evaluationResult : ResolutionDetails < T > | undefined = undefined ;
199197 const provider = providerEntry . provider ;
@@ -206,34 +204,34 @@ export class MultiProvider implements Provider {
206204 } ;
207205
208206 if ( ! this . evaluationStrategy . shouldEvaluateThisProvider ( strategyContext , context ) ) {
209- return true ;
207+ return [ true , null ] ;
210208 }
211209
210+ let resolution : ProviderResolutionResult < T > ;
211+
212212 try {
213213 evaluationResult = await this . evaluateProviderAndHooks ( flagKey , defaultValue , provider , hookContext , hookHints ) ;
214- resolutions . push ( {
214+ resolution = {
215215 details : evaluationResult ,
216216 provider : provider ,
217217 providerName : providerEntry . name ,
218- } ) ;
218+ } ;
219219 } catch ( error : unknown ) {
220- resolutions . push ( {
220+ resolution = {
221221 thrownError : error ,
222222 provider : provider ,
223223 providerName : providerEntry . name ,
224- } ) ;
224+ } ;
225225 thrownError = error ;
226226 }
227227
228228 if ( this . evaluationStrategy . runMode === 'sequential' ) {
229- return this . evaluationStrategy . shouldEvaluateNextProvider (
230- strategyContext ,
231- context ,
232- evaluationResult ,
233- thrownError ,
234- ) ;
229+ return [
230+ this . evaluationStrategy . shouldEvaluateNextProvider ( strategyContext , context , evaluationResult , thrownError ) ,
231+ resolution ,
232+ ] ;
235233 }
236- return true ;
234+ return [ true , resolution ] ;
237235 }
238236
239237 private async evaluateProviderAndHooks < T extends boolean | string | number | JsonValue > (
0 commit comments