@@ -46,7 +46,7 @@ export interface RequestOptions<Res> extends FetchOptions {
46
46
* evaluateBatch method.
47
47
*/
48
48
export interface BatchRequestOptions < Res > extends RequestOptions < Res > {
49
- failAny ?: boolean ; // TODO
49
+ rejectErrors ?: boolean ; // reject promise if any of the batch results errored
50
50
}
51
51
52
52
/** OPAClient is the starting point for using the high-level API.
@@ -166,23 +166,26 @@ export class OPAClient {
166
166
const res = resp . batchMixedResults || resp . batchSuccessfulPolicyEvaluation ;
167
167
if ( ! res ) throw `no result in API response` ;
168
168
169
- return Object . fromEntries (
170
- Object . entries ( res . responses ?? { } ) . map ( ( [ k , v ] ) => [
171
- k ,
172
- processResult ( v , opts ) ,
173
- ] ) ,
174
- ) ;
169
+ const entries = [ ] ;
170
+ for ( const [ k , v ] of Object . entries ( res . responses ?? { } ) ) {
171
+ entries . push ( [ k , await processResult ( v , opts ) ] ) ;
172
+ }
173
+ return Object . fromEntries ( entries ) ;
175
174
}
176
175
}
177
176
178
177
function processResult < Res > (
179
178
res : ResponsesSuccessfulPolicyResponse | ServerError ,
180
- opts ?: RequestOptions < Res > ,
181
- ) {
182
- if ( res && "code" in res ) return res as ServerError ;
179
+ opts ?: BatchRequestOptions < Res > ,
180
+ ) : Promise < Res | ServerError > {
181
+ if ( res && "code" in res ) {
182
+ if ( opts ?. rejectErrors ) return Promise . reject ( res as ServerError ) ;
183
+
184
+ return Promise . resolve ( res as ServerError ) ;
185
+ }
183
186
184
187
const fromResult = opts ?. fromResult || id < Res > ;
185
- return fromResult ( res . result ) ;
188
+ return Promise . resolve ( fromResult ( res . result ) ) ;
186
189
}
187
190
188
191
function id < T > ( x : any ) : T {
0 commit comments