( results: Record<string, Result.Result<Resolution<any>, EvaluationFailure>> )
| 462 | } |
| 463 | |
| 464 | const resolveRecord = ( |
| 465 | results: Record<string, Result.Result<Resolution<any>, EvaluationFailure>> |
| 466 | ): Effect.Effect<Resolution<Record<string, any>>, EvaluationFailure> => { |
| 467 | const values: Record<string, any> = {} |
| 468 | let firstFailure: EvaluationFailure | undefined |
| 469 | let firstAbsent: Absent | undefined |
| 470 | let hasInput = false |
| 471 | for (const key in results) { |
| 472 | const result = results[key] |
| 473 | if (Result.isFailure(result)) { |
| 474 | firstFailure ??= result.failure |
| 475 | hasInput = hasInput || result.failure.hasInput |
| 476 | continue |
| 477 | } |
| 478 | const resolution = result.success |
| 479 | if (resolution._tag === "Absent") { |
| 480 | firstAbsent ??= resolution |
| 481 | } else { |
| 482 | InternalRecord.assignProperty(values, key, resolution.value) |
| 483 | hasInput = hasInput || resolution.hasInput |
| 484 | } |
| 485 | } |
| 486 | if (firstFailure !== undefined) { |
| 487 | return Effect.fail(evaluationFailure(firstFailure.error, hasInput)) |
| 488 | } |
| 489 | if (firstAbsent !== undefined) { |
| 490 | return hasInput ? Effect.fail(evaluationFailure(firstAbsent.error, true)) : Effect.succeed(firstAbsent) |
| 491 | } |
| 492 | return Effect.succeed(resolved(values, hasInput)) |
| 493 | } |
| 494 | |
| 495 | /** |
| 496 | * Provides a fallback value when the config cannot resolve because none of its |
nothing calls this directly
no test coverage detected