Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
69f72ba
feat: Created methods to validate and register providers input
Tmakinde Sep 30, 2025
52f41ff
feat: Add multiprovider strategy files
Tmakinde Oct 16, 2025
c594355
feat: add multiprovider final result implementation
Tmakinde Oct 16, 2025
4b3a18f
feat: add a single provider resolution implementation
Tmakinde Oct 16, 2025
99a77ad
feat: resolve providers through strategy and return proper error as s…
Tmakinde Oct 16, 2025
330b367
fix: Refactor strategy implementation
Tmakinde Nov 7, 2025
8fe6922
chore: refactor provider validation method
Tmakinde Nov 17, 2025
96927b1
test: Add test for provider and it strategy
Tmakinde Nov 17, 2025
700d392
chore: Refactor default value check for readability
Tmakinde Jan 2, 2026
bd62d9b
chore: Use enum instead of string for provider runmode
Tmakinde Jan 5, 2026
178afa0
chore: Move invariant check for flag type vs default value up into th…
Tmakinde Jan 5, 2026
35218f8
chore: Add more test coverage for strategy context and evaluation
Tmakinde Jan 5, 2026
3135113
refactor: improve multiprovider implementation with cleaner abstractions
Tmakinde May 11, 2026
c7c3aa8
test: update tests for refactored multiprovider implementation
Tmakinde May 11, 2026
a30ad3e
chore: add code ownership for multiprovider namespace
Tmakinde May 11, 2026
ab593d5
feat(multiprovider): add case-insensitive duplicate provider name val…
Tmakinde May 11, 2026
9f22030
refactor(multiprovider): code refinements for clarity and consistency
Tmakinde May 11, 2026
b965ca3
docs(multiprovider): add comprehensive MultiProvider documentation
Tmakinde May 14, 2026
f8860a4
feat(multiprovider): align ComparisonStrategy with JS-SDK spec and im…
Tmakinde May 22, 2026
f097f83
test(multiprovider): improve ComparisonStrategy test coverage
Tmakinde May 22, 2026
26d5e38
fix: Fix issue that cab break comparison when value returned as null
Tmakinde May 25, 2026
86fffbf
docs(multiprovider): clarify evaluation terminology and add track() note
Tmakinde May 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@
# @global-owner1 and @global-owner2 will be requested for
# review when someone opens a pull request.
* @tcarrio

# MultiProvider implementation
/src/implementation/multiprovider/ @tmakinde
353 changes: 353 additions & 0 deletions README.md

Large diffs are not rendered by default.

57 changes: 57 additions & 0 deletions src/implementation/multiprovider/FinalResult.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

declare(strict_types=1);

namespace OpenFeature\implementation\multiprovider;

use OpenFeature\interfaces\provider\ResolutionDetails;
use Throwable;

use function count;

/**
* Represents the final result from a multi-provider evaluation strategy.
* Contains either successful resolution details or aggregated errors.
*/
class FinalResult
{
/**
* @param ResolutionDetails|null $details The final resolution details if successful
* @param string|null $providerName The name of the provider that provided the final result
* @param array<int, array{providerName: string, error: Throwable}>|null $errors Array of errors from providers if unsuccessful
*/
public function __construct(
private ?ResolutionDetails $details = null,
private ?string $providerName = null,
private ?array $errors = null,
) {
}

public function getDetails(): ?ResolutionDetails
{
return $this->details;
}

public function getProviderName(): ?string
{
return $this->providerName;
}

/**
* @return array<int, array{providerName: string, error: Throwable}>|null
*/
public function getErrors(): ?array
{
return $this->errors;
}

public function isSuccessful(): bool
{
return $this->details !== null && $this->errors === null;
}

public function hasErrors(): bool
{
return $this->errors !== null && count($this->errors) > 0;
}
}
Loading
Loading