@leancodepl/feature-flags-react-client 8.4.0 → 8.5.1

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 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
+ ```
package/index.cjs.js CHANGED
@@ -3,7 +3,22 @@
3
3
  var reactSdk = require('@openfeature/react-sdk');
4
4
  var webSdk = require('@openfeature/web-sdk');
5
5
 
6
- function mkFeatureFlags(flags, provider) {
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) {
7
22
  webSdk.OpenFeature.setProvider(provider);
8
23
  return {
9
24
  useFeatureFlag: (key, defaultValue)=>reactSdk.useFlag(key.toString(), defaultValue != null ? defaultValue : flags[key].defaultValue),
package/index.esm.js CHANGED
@@ -1,7 +1,22 @@
1
1
  import { OpenFeatureProvider, useFlag } from '@openfeature/react-sdk';
2
2
  import { OpenFeature } from '@openfeature/web-sdk';
3
3
 
4
- function mkFeatureFlags(flags, provider) {
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) {
5
20
  OpenFeature.setProvider(provider);
6
21
  return {
7
22
  useFeatureFlag: (key, defaultValue)=>useFlag(key.toString(), defaultValue != null ? defaultValue : flags[key].defaultValue),
package/package.json CHANGED
@@ -1,22 +1,52 @@
1
1
  {
2
2
  "name": "@leancodepl/feature-flags-react-client",
3
- "version": "8.4.0",
3
+ "version": "8.5.1",
4
4
  "license": "Apache-2.0",
5
5
  "dependencies": {
6
6
  "@openfeature/core": "^1.3.0",
7
7
  "@openfeature/react-sdk": "^0.4.5",
8
8
  "@openfeature/web-sdk": "^1.2.3"
9
9
  },
10
+ "publishConfig": {
11
+ "access": "public",
12
+ "registry": "https://registry.npmjs.org/"
13
+ },
14
+ "engines": {
15
+ "node": ">=18.0.0"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/leancodepl/js_corelibrary.git",
20
+ "directory": "packages/feature-flags/feature-flags-react-client"
21
+ },
22
+ "homepage": "https://github.com/leancodepl/js_corelibrary",
23
+ "bugs": {
24
+ "url": "https://github.com/leancodepl/js_corelibrary/issues"
25
+ },
26
+ "description": "React client for feature flag management and evaluation",
27
+ "keywords": [
28
+ "feature-flags",
29
+ "openfeature",
30
+ "react",
31
+ "typescript",
32
+ "javascript",
33
+ "leancode"
34
+ ],
35
+ "author": {
36
+ "name": "LeanCode",
37
+ "url": "https://leancode.co"
38
+ },
39
+ "sideEffects": false,
10
40
  "exports": {
11
41
  "./package.json": "./package.json",
12
42
  ".": {
13
43
  "module": "./index.esm.js",
14
- "types": "./index.esm.d.ts",
44
+ "types": "./index.d.ts",
15
45
  "import": "./index.cjs.mjs",
16
46
  "default": "./index.cjs.js"
17
47
  }
18
48
  },
19
49
  "module": "./index.esm.js",
20
50
  "main": "./index.cjs.js",
21
- "types": "./index.esm.d.ts"
51
+ "types": "./index.d.ts"
22
52
  }
@@ -4,6 +4,22 @@ export type FeatureFlagConfig = {
4
4
  defaultValue: any;
5
5
  };
6
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
+ */
7
23
  export declare function mkFeatureFlags<TFlags extends Flags>(flags: TFlags, provider: Provider): {
8
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>;
9
25
  FeatureFlagsProvider: typeof OpenFeatureProvider;
package/index.esm.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./src/index";
File without changes