@leancodepl/feature-flags-react-client 8.5.0 → 8.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +82 -0
- package/index.cjs.default.js +1 -0
- package/index.cjs.js +29 -0
- package/index.cjs.mjs +2 -0
- package/index.d.ts +1 -0
- package/index.esm.js +27 -0
- package/package.json +1 -6
- package/src/index.d.ts +1 -0
- package/src/lib/mkFeatureFlags.d.ts +26 -0
package/README.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# @leancodepl/feature-flags-react-client
|
|
2
|
+
|
|
3
|
+
React hooks for type-safe feature flag management using OpenFeature.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @leancodepl/feature-flags-react-client
|
|
9
|
+
# or
|
|
10
|
+
yarn add @leancodepl/feature-flags-react-client
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## API
|
|
14
|
+
|
|
15
|
+
### `mkFeatureFlags(flags, provider)`
|
|
16
|
+
|
|
17
|
+
Creates React hooks for type-safe feature flag management using OpenFeature.
|
|
18
|
+
|
|
19
|
+
**Parameters:**
|
|
20
|
+
|
|
21
|
+
- `flags: TFlags` - Feature flags configuration object with default values
|
|
22
|
+
- `provider: Provider` - OpenFeature provider instance
|
|
23
|
+
|
|
24
|
+
**Returns:** Object containing `useFeatureFlag` hook and `FeatureFlagsProvider` component
|
|
25
|
+
|
|
26
|
+
## Usage Examples
|
|
27
|
+
|
|
28
|
+
### Basic Setup
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
//featureFlags.ts
|
|
32
|
+
import { mkFeatureFlags } from "@leancodepl/feature-flags-react-client"
|
|
33
|
+
import { ConfigCatWebProvider } from "@openfeature/config-cat-web-provider"
|
|
34
|
+
|
|
35
|
+
const flags = {
|
|
36
|
+
enableNewFeature: { defaultValue: false },
|
|
37
|
+
maxRetries: { defaultValue: 3 },
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const provider = ConfigCatWebProvider.create("sdk-key")
|
|
41
|
+
export const { FeatureFlagsProvider, useFeatureFlag } = mkFeatureFlags(flags, provider)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Component Usage
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
import React from 'react';
|
|
48
|
+
import { FeatureFlagsProvider, useFeatureFlag } from './featureFlags';
|
|
49
|
+
|
|
50
|
+
function App() {
|
|
51
|
+
return (
|
|
52
|
+
<FeatureFlagsProvider>
|
|
53
|
+
<Dashboard />
|
|
54
|
+
</FeatureFlagsProvider>
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function Dashboard() {
|
|
59
|
+
const { value: isEnabled } = useFeatureFlag('enableNewFeature');
|
|
60
|
+
const { value: retries } = useFeatureFlag('maxRetries');
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<div>
|
|
64
|
+
{isEnabled ? <NewDashboard /> : <LegacyDashboard />}
|
|
65
|
+
<div>Max retries: {retries}</div>
|
|
66
|
+
</div>
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### With Default Override
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import React from 'react';
|
|
75
|
+
import { useFeatureFlag } from './featureFlags';
|
|
76
|
+
|
|
77
|
+
function Settings() {
|
|
78
|
+
const { value: retries } = useFeatureFlag('maxRetries', 5);
|
|
79
|
+
|
|
80
|
+
return <div>Retries: {retries}</div>;
|
|
81
|
+
}
|
|
82
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports._default = require('./index.cjs.js').default;
|
package/index.cjs.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var reactSdk = require('@openfeature/react-sdk');
|
|
4
|
+
var webSdk = require('@openfeature/web-sdk');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Creates React hooks for type-safe feature flag management using OpenFeature.
|
|
8
|
+
*
|
|
9
|
+
* Sets up OpenFeature provider and returns typed hooks for feature flag evaluation.
|
|
10
|
+
* Provides React context provider and hook for accessing feature flags in components.
|
|
11
|
+
*
|
|
12
|
+
* @param flags - Feature flags configuration object with default values
|
|
13
|
+
* @param provider - OpenFeature provider instance
|
|
14
|
+
* @returns Object containing `useFeatureFlag` hook and `FeatureFlagsProvider` component
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const flags = { enableFeature: { defaultValue: false } };
|
|
18
|
+
* const provider = new ConfigCatWebProvider('sdk-key');
|
|
19
|
+
* const { useFeatureFlag, FeatureFlagsProvider } = mkFeatureFlags(flags, provider);
|
|
20
|
+
* ```
|
|
21
|
+
*/ function mkFeatureFlags(flags, provider) {
|
|
22
|
+
webSdk.OpenFeature.setProvider(provider);
|
|
23
|
+
return {
|
|
24
|
+
useFeatureFlag: (key, defaultValue)=>reactSdk.useFlag(key.toString(), defaultValue != null ? defaultValue : flags[key].defaultValue),
|
|
25
|
+
FeatureFlagsProvider: reactSdk.OpenFeatureProvider
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
exports.mkFeatureFlags = mkFeatureFlags;
|
package/index.cjs.mjs
ADDED
package/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./src/index";
|
package/index.esm.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { OpenFeatureProvider, useFlag } from '@openfeature/react-sdk';
|
|
2
|
+
import { OpenFeature } from '@openfeature/web-sdk';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Creates React hooks for type-safe feature flag management using OpenFeature.
|
|
6
|
+
*
|
|
7
|
+
* Sets up OpenFeature provider and returns typed hooks for feature flag evaluation.
|
|
8
|
+
* Provides React context provider and hook for accessing feature flags in components.
|
|
9
|
+
*
|
|
10
|
+
* @param flags - Feature flags configuration object with default values
|
|
11
|
+
* @param provider - OpenFeature provider instance
|
|
12
|
+
* @returns Object containing `useFeatureFlag` hook and `FeatureFlagsProvider` component
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const flags = { enableFeature: { defaultValue: false } };
|
|
16
|
+
* const provider = new ConfigCatWebProvider('sdk-key');
|
|
17
|
+
* const { useFeatureFlag, FeatureFlagsProvider } = mkFeatureFlags(flags, provider);
|
|
18
|
+
* ```
|
|
19
|
+
*/ function mkFeatureFlags(flags, provider) {
|
|
20
|
+
OpenFeature.setProvider(provider);
|
|
21
|
+
return {
|
|
22
|
+
useFeatureFlag: (key, defaultValue)=>useFlag(key.toString(), defaultValue != null ? defaultValue : flags[key].defaultValue),
|
|
23
|
+
FeatureFlagsProvider: OpenFeatureProvider
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { mkFeatureFlags };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leancodepl/feature-flags-react-client",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.6.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@openfeature/core": "^1.3.0",
|
|
@@ -36,11 +36,6 @@
|
|
|
36
36
|
"name": "LeanCode",
|
|
37
37
|
"url": "https://leancode.co"
|
|
38
38
|
},
|
|
39
|
-
"files": [
|
|
40
|
-
"dist",
|
|
41
|
-
"README.md",
|
|
42
|
-
"CHANGELOG.md"
|
|
43
|
-
],
|
|
44
39
|
"sideEffects": false,
|
|
45
40
|
"exports": {
|
|
46
41
|
"./package.json": "./package.json",
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./lib/mkFeatureFlags";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { OpenFeatureProvider } from "@openfeature/react-sdk";
|
|
2
|
+
import { Provider } from "@openfeature/web-sdk";
|
|
3
|
+
export type FeatureFlagConfig = {
|
|
4
|
+
defaultValue: any;
|
|
5
|
+
};
|
|
6
|
+
export type Flags<TKeys extends string = string, TFlag extends FeatureFlagConfig = FeatureFlagConfig> = Record<TKeys, TFlag>;
|
|
7
|
+
/**
|
|
8
|
+
* Creates React hooks for type-safe feature flag management using OpenFeature.
|
|
9
|
+
*
|
|
10
|
+
* Sets up OpenFeature provider and returns typed hooks for feature flag evaluation.
|
|
11
|
+
* Provides React context provider and hook for accessing feature flags in components.
|
|
12
|
+
*
|
|
13
|
+
* @param flags - Feature flags configuration object with default values
|
|
14
|
+
* @param provider - OpenFeature provider instance
|
|
15
|
+
* @returns Object containing `useFeatureFlag` hook and `FeatureFlagsProvider` component
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const flags = { enableFeature: { defaultValue: false } };
|
|
19
|
+
* const provider = new ConfigCatWebProvider('sdk-key');
|
|
20
|
+
* const { useFeatureFlag, FeatureFlagsProvider } = mkFeatureFlags(flags, provider);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function mkFeatureFlags<TFlags extends Flags>(flags: TFlags, provider: Provider): {
|
|
24
|
+
useFeatureFlag: <TKey extends keyof TFlags>(key: TKey, defaultValue?: TFlags[TKey]["defaultValue"]) => import("@openfeature/react-sdk").FlagQuery<TFlags[TKey]["defaultValue"] extends infer T ? T extends TFlags[TKey]["defaultValue"] ? T extends boolean ? boolean : T extends number ? number : T extends string ? string : T extends import("@openfeature/core").JsonValue ? T : import("@openfeature/core").JsonValue : never : never>;
|
|
25
|
+
FeatureFlagsProvider: typeof OpenFeatureProvider;
|
|
26
|
+
};
|