Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
36 changes: 31 additions & 5 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,7 @@ describe('FeatureFlagDirective', () => {
},
0,
);
await OpenFeature.setProviderAndWait(newDomain, newProvider);
await OpenFeature.setProvider(newDomain, newProvider);

fixture.componentRef.setInput('domain', newDomain);
await fixture.whenStable();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,12 @@ export interface OpenFeatureConfig {
/**
* The default provider to be used by OpenFeature.
* If not provided, the provider can be set later using {@link OpenFeature.setProvider}
* or {@link OpenFeature.setProviderAndWait}.
*/
provider?: Provider;
/**
* A map of domain-bound providers to be registered with OpenFeature.
* The key is the domain name, and the value is the provider instance.
* Providers can also be registered later using {@link OpenFeature.setProvider}
* or {@link OpenFeature.setProviderAndWait}.
*/
domainBoundProviders?: Record<string, Provider>;

Expand All @@ -38,11 +36,17 @@ export const OPEN_FEATURE_CONFIG_TOKEN = new InjectionToken<OpenFeatureConfig>('
export class OpenFeatureModule {
static forRoot(config: OpenFeatureConfig): ModuleWithProviders<OpenFeatureModule> {
const context = typeof config.context === 'function' ? config.context() : config.context;
OpenFeature.setProvider(config.provider, context);
if (config.provider) {
OpenFeature.setProvider(config.provider, context).catch((err) => {
console.error('Error setting default provider in OpenFeatureModule:', err);
});
}

if (config.domainBoundProviders) {
Object.entries(config.domainBoundProviders).map(([domain, provider]) =>
OpenFeature.setProvider(domain, provider, context),
Object.entries(config.domainBoundProviders).forEach(([domain, provider]) =>
OpenFeature.setProvider(domain, provider, context).catch((err) => {
console.error(`Error setting provider for domain "${domain}" in OpenFeatureModule:`, err);
}),
);
}

Expand Down
8 changes: 4 additions & 4 deletions packages/react/test/evaluation.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1030,7 +1030,7 @@ describe('evaluation', () => {
}

const provider = new SilentUpdateProvider({});
await OpenFeature.setProviderAndWait('test', provider);
await OpenFeature.setProvider('test', provider);

// The triggerRender prop forces a re-render
const TestComponent = ({ triggerRender }: { triggerRender: number }) => {
Expand Down Expand Up @@ -1090,7 +1090,7 @@ describe('evaluation', () => {
},
});

await OpenFeature.setProviderAndWait(EVALUATION, provider);
await OpenFeature.setProvider(EVALUATION, provider);

const TestComponent = ({ flagKey }: { flagKey: string }) => {
const { value } = useFlag(flagKey, 'default');
Expand Down Expand Up @@ -1156,7 +1156,7 @@ describe('evaluation', () => {
// Async logic that CustomProvider depends upon for initialization.
await new Promise((resolve) => setTimeout(resolve, 100));

await OpenFeature.setProviderAndWait(EVALUATION, new CustomProvider());
await OpenFeature.setProvider(EVALUATION, new CustomProvider());
})();

const TestComponent = () => {
Expand Down Expand Up @@ -1218,7 +1218,7 @@ describe('evaluation', () => {
);

beforeAll(async () => {
await OpenFeature.setProviderAndWait(DOMAIN, makeProvider());
await OpenFeature.setProvider(DOMAIN, makeProvider());
});

afterEach(() => {
Expand Down
4 changes: 2 additions & 2 deletions packages/react/test/tracking.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ describe('tracking', () => {
describe('no domain', () => {
it('should call default provider', async () => {
const provider = mockProvider();
await OpenFeature.setProviderAndWait(provider);
await OpenFeature.setProvider(provider);

function Component() {
const { track } = useTrack();
Expand All @@ -56,7 +56,7 @@ describe('tracking', () => {
describe('domain set', () => {
it('should call provider for domain', async () => {
const domainProvider = mockProvider();
await OpenFeature.setProviderAndWait(domain, domainProvider);
await OpenFeature.setProvider(domain, domainProvider);

function Component() {
const { track } = useTrack();
Expand Down
20 changes: 6 additions & 14 deletions packages/server/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ import { OpenFeature } from '@openfeature/server-sdk';

// Register your feature flag provider
try {
await OpenFeature.setProviderAndWait(new YourProviderOfChoice());
await OpenFeature.setProvider(new YourProviderOfChoice());
} catch (error) {
console.error('Failed to initialize provider:', error);
}
Expand Down Expand Up @@ -124,18 +124,10 @@ Once you've added a provider as a dependency, it can be registered with OpenFeat

#### Awaitable

To register a provider and ensure it is ready before further actions are taken, you can use the `setProviderAndWait` method as shown below:
To register a provider and ensure it is ready before further actions are taken, you can use the `setProvider` method as shown below:

```ts
await OpenFeature.setProviderAndWait(new MyProvider());
```

#### Synchronous

To register a provider in a synchronous manner, you can use the `setProvider` method as shown below:

```ts
OpenFeature.setProvider(new MyProvider());
await OpenFeature.setProvider(new MyProvider());
```

Once the provider has been registered, the status can be tracked using [events](#eventing).
Expand Down Expand Up @@ -165,7 +157,7 @@ const backupProvider = new YourBackupProvider();
const multiProvider = new MultiProvider([primaryProvider, backupProvider], new FirstMatchStrategy());

// Register the multi-provider
await OpenFeature.setProviderAndWait(multiProvider);
await OpenFeature.setProvider(multiProvider);

// Use as normal
const client = OpenFeature.getClient();
Expand All @@ -191,7 +183,7 @@ const multiProvider = new MultiProvider(
new FirstMatchStrategy(),
);

await OpenFeature.setProviderAndWait(multiProvider);
await OpenFeature.setProvider(multiProvider);
```

**Comparison Example:**
Expand All @@ -210,7 +202,7 @@ const multiProvider = new MultiProvider(
}),
);

await OpenFeature.setProviderAndWait(multiProvider);
await OpenFeature.setProvider(multiProvider);
```

### Targeting
Expand Down
Loading
Loading