@featurevisor/react 0.39.0 → 0.40.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/CHANGELOG.md CHANGED
@@ -3,6 +3,25 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [0.40.0](https://github.com/fahad19/featurevisor/compare/v0.39.2...v0.40.0) (2023-07-16)
7
+
8
+
9
+ ### Features
10
+
11
+ * Hooks for checking if feature is enabled in React and Vue.js ([#108](https://github.com/fahad19/featurevisor/issues/108)) ([4e2a269](https://github.com/fahad19/featurevisor/commit/4e2a269da923a94055d232ec479e6562dc297120))
12
+
13
+
14
+
15
+
16
+
17
+ ## [0.39.1](https://github.com/fahad19/featurevisor/compare/v0.39.0...v0.39.1) (2023-07-16)
18
+
19
+ **Note:** Version bump only for package @featurevisor/react
20
+
21
+
22
+
23
+
24
+
6
25
  # [0.39.0](https://github.com/fahad19/featurevisor/compare/v0.38.0...v0.39.0) (2023-07-16)
7
26
 
8
27
  **Note:** Version bump only for package @featurevisor/react
package/README.md CHANGED
@@ -7,11 +7,12 @@ Visit [https://featurevisor.com](https://featurevisor.com) for more information.
7
7
  - [Installation](#installation)
8
8
  - [API](#api)
9
9
  - [`FeaturevisorProvider`](#featurevisorprovider)
10
- - [`activateFeature`](#activatefeature)
11
- - [`useSdk`](#usesdk)
12
10
  - [`useStatus`](#usestatus)
11
+ - [`useFlag`](#useflag)
13
12
  - [`useVariation`](#usevariation)
14
13
  - [`useVariable`](#usevariable)
14
+ - [`activateFeature`](#activatefeature)
15
+ - [`useSdk`](#usesdk)
15
16
 
16
17
  ## Installation
17
18
 
@@ -43,18 +44,6 @@ function Root() {
43
44
  }
44
45
  ```
45
46
 
46
- ### `activateFeature`
47
-
48
- > activateFeature(featureKey, context = {}): VariationValue | undefined
49
-
50
- Hook for activate feature.
51
-
52
- ### `useSdk`
53
-
54
- > useSdk(): FeaturevisorInstance
55
-
56
- Hook for getting Featurevisor SDK instance.
57
-
58
47
  ### `useStatus`
59
48
 
60
49
  > useStatus(): { isReady: boolean }
@@ -76,6 +65,12 @@ function App() {
76
65
  }
77
66
  ```
78
67
 
68
+ ### `useFlag`
69
+
70
+ > useFlag(featureKey, context = {}): boolean
71
+
72
+ Hook for checking if feature is enabled.
73
+
79
74
  ### `useVariation`
80
75
 
81
76
  > useVariation(featureKey, context = {}): VariationValue | undefined
@@ -88,6 +83,18 @@ Hook for getting variation value.
88
83
 
89
84
  Hook for getting variable value.
90
85
 
86
+ ### `activateFeature`
87
+
88
+ > activateFeature(featureKey, context = {}): VariationValue | undefined
89
+
90
+ Hook for activating feature.
91
+
92
+ ### `useSdk`
93
+
94
+ > useSdk(): FeaturevisorInstance
95
+
96
+ Hook for getting Featurevisor SDK instance.
97
+
91
98
  ## License <!-- omit in toc -->
92
99
 
93
100
  MIT © [Fahad Heylaal](https://fahad19.com)
@@ -1,18 +1,18 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <coverage generated="1689538307384" clover="3.2.0">
3
- <project timestamp="1689538307384" name="All files">
4
- <metrics statements="40" coveredstatements="34" conditionals="4" coveredconditionals="1" methods="9" coveredmethods="6" elements="53" coveredelements="41" complexity="0" loc="40" ncloc="40" packages="1" files="7" classes="7"/>
2
+ <coverage generated="1689541069111" clover="3.2.0">
3
+ <project timestamp="1689541069111" name="All files">
4
+ <metrics statements="44" coveredstatements="38" conditionals="5" coveredconditionals="1" methods="10" coveredmethods="7" elements="59" coveredelements="46" complexity="0" loc="44" ncloc="44" packages="1" files="8" classes="8"/>
5
5
  <file name="FeaturevisorContext.ts" path="/home/runner/work/featurevisor/featurevisor/packages/react/src/FeaturevisorContext.ts">
6
6
  <metrics statements="2" coveredstatements="2" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
7
- <line num="1" count="5" type="stmt"/>
8
- <line num="4" count="5" type="stmt"/>
7
+ <line num="1" count="6" type="stmt"/>
8
+ <line num="4" count="6" type="stmt"/>
9
9
  </file>
10
10
  <file name="FeaturevisorProvider.tsx" path="/home/runner/work/featurevisor/featurevisor/packages/react/src/FeaturevisorProvider.tsx">
11
11
  <metrics statements="4" coveredstatements="4" conditionals="0" coveredconditionals="0" methods="1" coveredmethods="1"/>
12
- <line num="1" count="5" type="stmt"/>
13
- <line num="4" count="5" type="stmt"/>
14
- <line num="11" count="5" type="stmt"/>
15
- <line num="12" count="5" type="stmt"/>
12
+ <line num="1" count="6" type="stmt"/>
13
+ <line num="4" count="6" type="stmt"/>
14
+ <line num="11" count="6" type="stmt"/>
15
+ <line num="12" count="7" type="stmt"/>
16
16
  </file>
17
17
  <file name="activateFeature.ts" path="/home/runner/work/featurevisor/featurevisor/packages/react/src/activateFeature.ts">
18
18
  <metrics statements="5" coveredstatements="5" conditionals="1" coveredconditionals="0" methods="1" coveredmethods="1"/>
@@ -22,13 +22,20 @@
22
22
  <line num="9" count="1" type="stmt"/>
23
23
  <line num="11" count="1" type="stmt"/>
24
24
  </file>
25
+ <file name="useFlag.ts" path="/home/runner/work/featurevisor/featurevisor/packages/react/src/useFlag.ts">
26
+ <metrics statements="4" coveredstatements="4" conditionals="1" coveredconditionals="0" methods="1" coveredmethods="1"/>
27
+ <line num="3" count="1" type="stmt"/>
28
+ <line num="5" count="2" type="cond" truecount="0" falsecount="1"/>
29
+ <line num="6" count="2" type="stmt"/>
30
+ <line num="8" count="2" type="stmt"/>
31
+ </file>
25
32
  <file name="useSdk.ts" path="/home/runner/work/featurevisor/featurevisor/packages/react/src/useSdk.ts">
26
33
  <metrics statements="5" coveredstatements="5" conditionals="0" coveredconditionals="0" methods="1" coveredmethods="1"/>
27
- <line num="1" count="5" type="stmt"/>
28
- <line num="4" count="5" type="stmt"/>
29
- <line num="6" count="5" type="stmt"/>
30
- <line num="7" count="5" type="stmt"/>
31
- <line num="9" count="5" type="stmt"/>
34
+ <line num="1" count="6" type="stmt"/>
35
+ <line num="4" count="6" type="stmt"/>
36
+ <line num="6" count="6" type="stmt"/>
37
+ <line num="7" count="7" type="stmt"/>
38
+ <line num="9" count="7" type="stmt"/>
32
39
  </file>
33
40
  <file name="useStatus.ts" path="/home/runner/work/featurevisor/featurevisor/packages/react/src/useStatus.ts">
34
41
  <metrics statements="14" coveredstatements="8" conditionals="1" coveredconditionals="1" methods="4" coveredmethods="1"/>
@@ -1,7 +1,8 @@
1
- {"/home/runner/work/featurevisor/featurevisor/packages/react/src/FeaturevisorContext.ts": {"path":"/home/runner/work/featurevisor/featurevisor/packages/react/src/FeaturevisorContext.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":31}},"1":{"start":{"line":4,"column":13},"end":{"line":4,"column":100}}},"fnMap":{},"branchMap":{},"s":{"0":5,"1":5},"f":{},"b":{}}
2
- ,"/home/runner/work/featurevisor/featurevisor/packages/react/src/FeaturevisorProvider.tsx": {"path":"/home/runner/work/featurevisor/featurevisor/packages/react/src/FeaturevisorProvider.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":31}},"1":{"start":{"line":4,"column":0},"end":{"line":4,"column":60}},"2":{"start":{"line":12,"column":2},"end":{"line":14,"column":4}},"3":{"start":{"line":11,"column":0},"end":{"line":11,"column":16}}},"fnMap":{"0":{"name":"FeaturevisorProvider","decl":{"start":{"line":11,"column":16},"end":{"line":11,"column":36}},"loc":{"start":{"line":11,"column":69},"end":{"line":15,"column":1}}}},"branchMap":{},"s":{"0":5,"1":5,"2":5,"3":5},"f":{"0":5},"b":{}}
1
+ {"/home/runner/work/featurevisor/featurevisor/packages/react/src/FeaturevisorContext.ts": {"path":"/home/runner/work/featurevisor/featurevisor/packages/react/src/FeaturevisorContext.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":31}},"1":{"start":{"line":4,"column":13},"end":{"line":4,"column":100}}},"fnMap":{},"branchMap":{},"s":{"0":6,"1":6},"f":{},"b":{}}
2
+ ,"/home/runner/work/featurevisor/featurevisor/packages/react/src/FeaturevisorProvider.tsx": {"path":"/home/runner/work/featurevisor/featurevisor/packages/react/src/FeaturevisorProvider.tsx","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":31}},"1":{"start":{"line":4,"column":0},"end":{"line":4,"column":60}},"2":{"start":{"line":12,"column":2},"end":{"line":14,"column":4}},"3":{"start":{"line":11,"column":0},"end":{"line":11,"column":16}}},"fnMap":{"0":{"name":"FeaturevisorProvider","decl":{"start":{"line":11,"column":16},"end":{"line":11,"column":36}},"loc":{"start":{"line":11,"column":69},"end":{"line":15,"column":1}}}},"branchMap":{},"s":{"0":6,"1":6,"2":7,"3":6},"f":{"0":7},"b":{}}
3
3
  ,"/home/runner/work/featurevisor/featurevisor/packages/react/src/activateFeature.ts": {"path":"/home/runner/work/featurevisor/featurevisor/packages/react/src/activateFeature.ts","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"1":{"start":{"line":7,"column":2},"end":{"line":7,"column":null}},"2":{"start":{"line":9,"column":14},"end":{"line":9,"column":22}},"3":{"start":{"line":11,"column":2},"end":{"line":11,"column":43}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":16}}},"fnMap":{"0":{"name":"activateFeature","decl":{"start":{"line":5,"column":16},"end":{"line":5,"column":31}},"loc":{"start":{"line":7,"column":23},"end":{"line":12,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":7,"column":2},"end":{"line":7,"column":null}},"type":"if","locations":[{"start":{"line":7,"column":2},"end":{"line":7,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1},"f":{"0":1},"b":{"0":[0]}}
4
- ,"/home/runner/work/featurevisor/featurevisor/packages/react/src/useSdk.ts": {"path":"/home/runner/work/featurevisor/featurevisor/packages/react/src/useSdk.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":31}},"1":{"start":{"line":4,"column":0},"end":{"line":4,"column":60}},"2":{"start":{"line":7,"column":14},"end":{"line":7,"column":51}},"3":{"start":{"line":9,"column":2},"end":{"line":9,"column":37}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":16}}},"fnMap":{"0":{"name":"useSdk","decl":{"start":{"line":6,"column":16},"end":{"line":6,"column":22}},"loc":{"start":{"line":6,"column":22},"end":{"line":10,"column":1}}}},"branchMap":{},"s":{"0":5,"1":5,"2":5,"3":5,"4":5},"f":{"0":5},"b":{}}
4
+ ,"/home/runner/work/featurevisor/featurevisor/packages/react/src/useFlag.ts": {"path":"/home/runner/work/featurevisor/featurevisor/packages/react/src/useFlag.ts","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"1":{"start":{"line":5,"column":48},"end":{"line":5,"column":null}},"2":{"start":{"line":6,"column":14},"end":{"line":6,"column":22}},"3":{"start":{"line":8,"column":2},"end":{"line":8,"column":44}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":16}}},"fnMap":{"0":{"name":"useFlag","decl":{"start":{"line":5,"column":16},"end":{"line":5,"column":23}},"loc":{"start":{"line":5,"column":69},"end":{"line":9,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":5,"column":48},"end":{"line":5,"column":null}},"type":"if","locations":[{"start":{"line":5,"column":48},"end":{"line":5,"column":null}}]}},"s":{"0":1,"1":2,"2":2,"3":2,"4":1},"f":{"0":2},"b":{"0":[0]}}
5
+ ,"/home/runner/work/featurevisor/featurevisor/packages/react/src/useSdk.ts": {"path":"/home/runner/work/featurevisor/featurevisor/packages/react/src/useSdk.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":31}},"1":{"start":{"line":4,"column":0},"end":{"line":4,"column":60}},"2":{"start":{"line":7,"column":14},"end":{"line":7,"column":51}},"3":{"start":{"line":9,"column":2},"end":{"line":9,"column":37}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":16}}},"fnMap":{"0":{"name":"useSdk","decl":{"start":{"line":6,"column":16},"end":{"line":6,"column":22}},"loc":{"start":{"line":6,"column":22},"end":{"line":10,"column":1}}}},"branchMap":{},"s":{"0":6,"1":6,"2":7,"3":7,"4":6},"f":{"0":7},"b":{}}
5
6
  ,"/home/runner/work/featurevisor/featurevisor/packages/react/src/useStatus.ts": {"path":"/home/runner/work/featurevisor/featurevisor/packages/react/src/useStatus.ts","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":31}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"2":{"start":{"line":10,"column":14},"end":{"line":10,"column":22}},"3":{"start":{"line":11,"column":24},"end":{"line":11,"column":37}},"4":{"start":{"line":13,"column":32},"end":{"line":13,"column":61}},"5":{"start":{"line":13,"column":16},"end":{"line":13,"column":18}},"6":{"start":{"line":13,"column":28},"end":{"line":13,"column":32}},"7":{"start":{"line":15,"column":2},"end":{"line":17,"column":null}},"8":{"start":{"line":16,"column":4},"end":{"line":16,"column":23}},"9":{"start":{"line":19,"column":2},"end":{"line":29,"column":9}},"10":{"start":{"line":21,"column":6},"end":{"line":21,"column":23}},"11":{"start":{"line":24,"column":4},"end":{"line":24,"column":33}},"12":{"start":{"line":26,"column":4},"end":{"line":28,"column":6}},"13":{"start":{"line":27,"column":6},"end":{"line":27,"column":36}},"14":{"start":{"line":31,"column":2},"end":{"line":31,"column":21}},"15":{"start":{"line":9,"column":0},"end":{"line":9,"column":16}}},"fnMap":{"0":{"name":"useStatus","decl":{"start":{"line":9,"column":16},"end":{"line":9,"column":25}},"loc":{"start":{"line":9,"column":25},"end":{"line":32,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":19,"column":18},"end":{"line":19,"column":null}},"loc":{"start":{"line":19,"column":18},"end":{"line":29,"column":3}}},"2":{"name":"handleReady","decl":{"start":{"line":20,"column":13},"end":{"line":20,"column":24}},"loc":{"start":{"line":20,"column":24},"end":{"line":22,"column":5}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":26,"column":11},"end":{"line":26,"column":null}},"loc":{"start":{"line":26,"column":11},"end":{"line":28,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":15,"column":2},"end":{"line":17,"column":null}},"type":"if","locations":[{"start":{"line":15,"column":2},"end":{"line":17,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":1},"f":{"0":1,"1":0,"2":0,"3":0},"b":{"0":[1]}}
6
7
  ,"/home/runner/work/featurevisor/featurevisor/packages/react/src/useVariable.ts": {"path":"/home/runner/work/featurevisor/featurevisor/packages/react/src/useVariable.ts","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"1":{"start":{"line":8,"column":2},"end":{"line":8,"column":null}},"2":{"start":{"line":10,"column":14},"end":{"line":10,"column":22}},"3":{"start":{"line":12,"column":2},"end":{"line":12,"column":59}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":16}}},"fnMap":{"0":{"name":"useVariable","decl":{"start":{"line":5,"column":16},"end":{"line":5,"column":27}},"loc":{"start":{"line":8,"column":23},"end":{"line":13,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":2},"end":{"line":8,"column":null}},"type":"if","locations":[{"start":{"line":8,"column":2},"end":{"line":8,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1},"f":{"0":1},"b":{"0":[0]}}
7
8
  ,"/home/runner/work/featurevisor/featurevisor/packages/react/src/useVariation.ts": {"path":"/home/runner/work/featurevisor/featurevisor/packages/react/src/useVariation.ts","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"1":{"start":{"line":7,"column":2},"end":{"line":7,"column":null}},"2":{"start":{"line":9,"column":14},"end":{"line":9,"column":22}},"3":{"start":{"line":11,"column":2},"end":{"line":11,"column":47}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":16}}},"fnMap":{"0":{"name":"useVariation","decl":{"start":{"line":5,"column":16},"end":{"line":5,"column":28}},"loc":{"start":{"line":7,"column":23},"end":{"line":12,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":7,"column":2},"end":{"line":7,"column":null}},"type":"if","locations":[{"start":{"line":7,"column":2},"end":{"line":7,"column":null}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1},"f":{"0":1},"b":{"0":[0]}}
@@ -67,10 +67,10 @@
67
67
  <a name='L2'></a><a href='#L2'>2</a>
68
68
  <a name='L3'></a><a href='#L3'>3</a>
69
69
  <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">5x</span>
70
+ <a name='L5'></a><a href='#L5'>5</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">6x</span>
71
71
  <span class="cline-any cline-neutral">&nbsp;</span>
72
72
  <span class="cline-any cline-neutral">&nbsp;</span>
73
- <span class="cline-any cline-yes">5x</span>
73
+ <span class="cline-any cline-yes">6x</span>
74
74
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import * as React from "react";
75
75
  import { FeaturevisorInstance } from "@featurevisor/sdk";
76
76
  &nbsp;
@@ -82,7 +82,7 @@ export const FeaturevisorContext = React.createContext&lt;FeaturevisorInstance |
82
82
  <div class='footer quiet pad2 space-top1 center small'>
83
83
  Code coverage generated by
84
84
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
85
- at 2023-07-16T20:11:47.367Z
85
+ at 2023-07-16T20:57:49.090Z
86
86
  </div>
87
87
  <script src="prettify.js"></script>
88
88
  <script>
@@ -78,18 +78,18 @@
78
78
  <a name='L13'></a><a href='#L13'>13</a>
79
79
  <a name='L14'></a><a href='#L14'>14</a>
80
80
  <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">5x</span>
81
+ <a name='L16'></a><a href='#L16'>16</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">6x</span>
82
82
  <span class="cline-any cline-neutral">&nbsp;</span>
83
83
  <span class="cline-any cline-neutral">&nbsp;</span>
84
- <span class="cline-any cline-yes">5x</span>
84
+ <span class="cline-any cline-yes">6x</span>
85
85
  <span class="cline-any cline-neutral">&nbsp;</span>
86
86
  <span class="cline-any cline-neutral">&nbsp;</span>
87
87
  <span class="cline-any cline-neutral">&nbsp;</span>
88
88
  <span class="cline-any cline-neutral">&nbsp;</span>
89
89
  <span class="cline-any cline-neutral">&nbsp;</span>
90
90
  <span class="cline-any cline-neutral">&nbsp;</span>
91
- <span class="cline-any cline-yes">5x</span>
92
- <span class="cline-any cline-yes">5x</span>
91
+ <span class="cline-any cline-yes">6x</span>
92
+ <span class="cline-any cline-yes">7x</span>
93
93
  <span class="cline-any cline-neutral">&nbsp;</span>
94
94
  <span class="cline-any cline-neutral">&nbsp;</span>
95
95
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -115,7 +115,7 @@ export function FeaturevisorProvider(props: FeaturevisorProviderProps) {
115
115
  <div class='footer quiet pad2 space-top1 center small'>
116
116
  Code coverage generated by
117
117
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
118
- at 2023-07-16T20:11:47.367Z
118
+ at 2023-07-16T20:57:49.090Z
119
119
  </div>
120
120
  <script src="prettify.js"></script>
121
121
  <script>
@@ -106,7 +106,7 @@ export function activateFeature(
106
106
  <div class='footer quiet pad2 space-top1 center small'>
107
107
  Code coverage generated by
108
108
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
109
- at 2023-07-16T20:11:47.367Z
109
+ at 2023-07-16T20:57:49.090Z
110
110
  </div>
111
111
  <script src="prettify.js"></script>
112
112
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">85.71% </span>
26
+ <span class="strong">87.23% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>36/42</span>
28
+ <span class='fraction'>41/47</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">25% </span>
33
+ <span class="strong">20% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>1/4</span>
35
+ <span class='fraction'>1/5</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">66.66% </span>
40
+ <span class="strong">70% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>6/9</span>
42
+ <span class='fraction'>7/10</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">85% </span>
47
+ <span class="strong">86.36% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>34/40</span>
49
+ <span class='fraction'>38/44</span>
50
50
  </div>
51
51
 
52
52
 
@@ -123,6 +123,21 @@
123
123
  <td data-value="5" class="abs high">5/5</td>
124
124
  </tr>
125
125
 
126
+ <tr>
127
+ <td class="file high" data-value="useFlag.ts"><a href="useFlag.ts.html">useFlag.ts</a></td>
128
+ <td data-value="100" class="pic high">
129
+ <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
130
+ </td>
131
+ <td data-value="100" class="pct high">100%</td>
132
+ <td data-value="5" class="abs high">5/5</td>
133
+ <td data-value="0" class="pct low">0%</td>
134
+ <td data-value="1" class="abs low">0/1</td>
135
+ <td data-value="100" class="pct high">100%</td>
136
+ <td data-value="1" class="abs high">1/1</td>
137
+ <td data-value="100" class="pct high">100%</td>
138
+ <td data-value="4" class="abs high">4/4</td>
139
+ </tr>
140
+
126
141
  <tr>
127
142
  <td class="file high" data-value="useSdk.ts"><a href="useSdk.ts.html">useSdk.ts</a></td>
128
143
  <td data-value="100" class="pic high">
@@ -191,7 +206,7 @@
191
206
  <div class='footer quiet pad2 space-top1 center small'>
192
207
  Code coverage generated by
193
208
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
194
- at 2023-07-16T20:11:47.367Z
209
+ at 2023-07-16T20:57:49.090Z
195
210
  </div>
196
211
  <script src="prettify.js"></script>
197
212
  <script>
@@ -0,0 +1,112 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for useFlag.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="prettify.css" />
9
+ <link rel="stylesheet" href="base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="index.html">All files</a> useFlag.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">100% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>5/5</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/1</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>1/1</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">100% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>4/4</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
76
+ <span class="cline-any cline-neutral">&nbsp;</span>
77
+ <span class="cline-any cline-yes">1x</span>
78
+ <span class="cline-any cline-neutral">&nbsp;</span>
79
+ <span class="cline-any cline-yes">2x</span>
80
+ <span class="cline-any cline-yes">2x</span>
81
+ <span class="cline-any cline-neutral">&nbsp;</span>
82
+ <span class="cline-any cline-yes">2x</span>
83
+ <span class="cline-any cline-neutral">&nbsp;</span>
84
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Context, FeatureKey } from "@featurevisor/types";
85
+ &nbsp;
86
+ import { useSdk } from "./useSdk";
87
+ &nbsp;
88
+ export function useFlag(featureKey: FeatureKey, <span class="missing-if-branch" title="if path not taken" >I</span>context: Context = {}): boolean {
89
+ const sdk = useSdk();
90
+ &nbsp;
91
+ return sdk.isEnabled(featureKey, context);
92
+ }
93
+ &nbsp;</pre></td></tr></table></pre>
94
+
95
+ <div class='push'></div><!-- for sticky footer -->
96
+ </div><!-- /wrapper -->
97
+ <div class='footer quiet pad2 space-top1 center small'>
98
+ Code coverage generated by
99
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
100
+ at 2023-07-16T20:57:49.090Z
101
+ </div>
102
+ <script src="prettify.js"></script>
103
+ <script>
104
+ window.onload = function () {
105
+ prettyPrint();
106
+ };
107
+ </script>
108
+ <script src="sorter.js"></script>
109
+ <script src="block-navigation.js"></script>
110
+ </body>
111
+ </html>
112
+
@@ -73,15 +73,15 @@
73
73
  <a name='L8'></a><a href='#L8'>8</a>
74
74
  <a name='L9'></a><a href='#L9'>9</a>
75
75
  <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">5x</span>
76
+ <a name='L11'></a><a href='#L11'>11</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">6x</span>
77
77
  <span class="cline-any cline-neutral">&nbsp;</span>
78
78
  <span class="cline-any cline-neutral">&nbsp;</span>
79
- <span class="cline-any cline-yes">5x</span>
79
+ <span class="cline-any cline-yes">6x</span>
80
80
  <span class="cline-any cline-neutral">&nbsp;</span>
81
- <span class="cline-any cline-yes">5x</span>
82
- <span class="cline-any cline-yes">5x</span>
81
+ <span class="cline-any cline-yes">6x</span>
82
+ <span class="cline-any cline-yes">7x</span>
83
83
  <span class="cline-any cline-neutral">&nbsp;</span>
84
- <span class="cline-any cline-yes">5x</span>
84
+ <span class="cline-any cline-yes">7x</span>
85
85
  <span class="cline-any cline-neutral">&nbsp;</span>
86
86
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import * as React from "react";
87
87
  import { FeaturevisorInstance } from "@featurevisor/sdk";
@@ -100,7 +100,7 @@ export function useSdk(): FeaturevisorInstance {
100
100
  <div class='footer quiet pad2 space-top1 center small'>
101
101
  Code coverage generated by
102
102
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
103
- at 2023-07-16T20:11:47.367Z
103
+ at 2023-07-16T20:57:49.090Z
104
104
  </div>
105
105
  <script src="prettify.js"></script>
106
106
  <script>
@@ -166,7 +166,7 @@ export function useStatus(): Status {
166
166
  <div class='footer quiet pad2 space-top1 center small'>
167
167
  Code coverage generated by
168
168
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
169
- at 2023-07-16T20:11:47.367Z
169
+ at 2023-07-16T20:57:49.090Z
170
170
  </div>
171
171
  <script src="prettify.js"></script>
172
172
  <script>
@@ -109,7 +109,7 @@ export function useVariable(
109
109
  <div class='footer quiet pad2 space-top1 center small'>
110
110
  Code coverage generated by
111
111
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
112
- at 2023-07-16T20:11:47.367Z
112
+ at 2023-07-16T20:57:49.090Z
113
113
  </div>
114
114
  <script src="prettify.js"></script>
115
115
  <script>
@@ -106,7 +106,7 @@ export function useVariation(
106
106
  <div class='footer quiet pad2 space-top1 center small'>
107
107
  Code coverage generated by
108
108
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
109
- at 2023-07-16T20:11:47.367Z
109
+ at 2023-07-16T20:57:49.090Z
110
110
  </div>
111
111
  <script src="prettify.js"></script>
112
112
  <script>
@@ -2,8 +2,8 @@ TN:
2
2
  SF:src/FeaturevisorContext.ts
3
3
  FNF:0
4
4
  FNH:0
5
- DA:1,5
6
- DA:4,5
5
+ DA:1,6
6
+ DA:4,6
7
7
  LF:2
8
8
  LH:2
9
9
  BRF:0
@@ -14,11 +14,11 @@ SF:src/FeaturevisorProvider.tsx
14
14
  FN:11,FeaturevisorProvider
15
15
  FNF:1
16
16
  FNH:1
17
- FNDA:5,FeaturevisorProvider
18
- DA:1,5
19
- DA:4,5
20
- DA:11,5
21
- DA:12,5
17
+ FNDA:7,FeaturevisorProvider
18
+ DA:1,6
19
+ DA:4,6
20
+ DA:11,6
21
+ DA:12,7
22
22
  LF:4
23
23
  LH:4
24
24
  BRF:0
@@ -42,16 +42,32 @@ BRF:1
42
42
  BRH:0
43
43
  end_of_record
44
44
  TN:
45
+ SF:src/useFlag.ts
46
+ FN:5,useFlag
47
+ FNF:1
48
+ FNH:1
49
+ FNDA:2,useFlag
50
+ DA:3,1
51
+ DA:5,2
52
+ DA:6,2
53
+ DA:8,2
54
+ LF:4
55
+ LH:4
56
+ BRDA:5,0,0,0
57
+ BRF:1
58
+ BRH:0
59
+ end_of_record
60
+ TN:
45
61
  SF:src/useSdk.ts
46
62
  FN:6,useSdk
47
63
  FNF:1
48
64
  FNH:1
49
- FNDA:5,useSdk
50
- DA:1,5
51
- DA:4,5
52
- DA:6,5
53
- DA:7,5
54
- DA:9,5
65
+ FNDA:7,useSdk
66
+ DA:1,6
67
+ DA:4,6
68
+ DA:6,6
69
+ DA:7,7
70
+ DA:9,7
55
71
  LF:5
56
72
  LH:5
57
73
  BRF:0
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.FeaturevisorReact=t(require("react")):e.FeaturevisorReact=t(e.React)}(this,(e=>(()=>{"use strict";var t={67:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FeaturevisorContext=void 0;var o=r(359);t.FeaturevisorContext=o.createContext(void 0)},673:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FeaturevisorProvider=void 0;var o=r(359),i=r(67);t.FeaturevisorProvider=function(e){return o.createElement(i.FeaturevisorContext.Provider,{value:e.sdk},e.children)}},289:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.activateFeature=void 0;var o=r(901);t.activateFeature=function(e,t){return void 0===t&&(t={}),(0,o.useSdk)().activate(e,t)}},97:function(e,t,r){var o=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,o,i)}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||o(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(67),t),i(r(673),t),i(r(289),t),i(r(901),t),i(r(9),t),i(r(26),t),i(r(613),t)},901:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useSdk=void 0;var o=r(359),i=r(67);t.useSdk=function(){return o.useContext(i.FeaturevisorContext)}},9:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useStatus=void 0;var o=r(359),i=r(901);t.useStatus=function(){var e=(0,i.useSdk)(),t=e.isReady(),r=o.useState(t),u=r[0],a=r[1];return u||o.useEffect((function(){function t(){a(!0)}return e.on("ready",t),function(){e.off("ready",t)}}),[]),{isReady:u}}},26:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useVariable=void 0;var o=r(901);t.useVariable=function(e,t,r){return void 0===r&&(r={}),(0,o.useSdk)().getVariable(e,t,r)}},613:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useVariation=void 0;var o=r(901);t.useVariation=function(e,t){return void 0===t&&(t={}),(0,o.useSdk)().getVariation(e,t)}},359:t=>{t.exports=e}},r={};return function e(o){var i=r[o];if(void 0!==i)return i.exports;var u=r[o]={exports:{}};return t[o].call(u.exports,u,u.exports,e),u.exports}(97)})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.FeaturevisorReact=t(require("react")):e.FeaturevisorReact=t(e.React)}(this,(e=>(()=>{"use strict";var t={67:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FeaturevisorContext=void 0;var o=r(359);t.FeaturevisorContext=o.createContext(void 0)},673:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FeaturevisorProvider=void 0;var o=r(359),i=r(67);t.FeaturevisorProvider=function(e){return o.createElement(i.FeaturevisorContext.Provider,{value:e.sdk},e.children)}},289:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.activateFeature=void 0;var o=r(901);t.activateFeature=function(e,t){return void 0===t&&(t={}),(0,o.useSdk)().activate(e,t)}},97:function(e,t,r){var o=this&&this.__createBinding||(Object.create?function(e,t,r,o){void 0===o&&(o=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,o,i)}:function(e,t,r,o){void 0===o&&(o=r),e[o]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||o(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),i(r(67),t),i(r(673),t),i(r(289),t),i(r(901),t),i(r(9),t),i(r(26),t),i(r(613),t),i(r(129),t)},129:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useFlag=void 0;var o=r(901);t.useFlag=function(e,t){return void 0===t&&(t={}),(0,o.useSdk)().isEnabled(e,t)}},901:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useSdk=void 0;var o=r(359),i=r(67);t.useSdk=function(){return o.useContext(i.FeaturevisorContext)}},9:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useStatus=void 0;var o=r(359),i=r(901);t.useStatus=function(){var e=(0,i.useSdk)(),t=e.isReady(),r=o.useState(t),u=r[0],a=r[1];return u||o.useEffect((function(){function t(){a(!0)}return e.on("ready",t),function(){e.off("ready",t)}}),[]),{isReady:u}}},26:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useVariable=void 0;var o=r(901);t.useVariable=function(e,t,r){return void 0===r&&(r={}),(0,o.useSdk)().getVariable(e,t,r)}},613:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useVariation=void 0;var o=r(901);t.useVariation=function(e,t){return void 0===t&&(t={}),(0,o.useSdk)().getVariation(e,t)}},359:t=>{t.exports=e}},r={};return function e(o){var i=r[o];if(void 0!==i)return i.exports;var u=r[o]={exports:{}};return t[o].call(u.exports,u,u.exports,e),u.exports}(97)})()));
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.gz CHANGED
Binary file
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,EAAQG,QAAQ,UACR,mBAAXC,QAAyBA,OAAOC,IAC9CD,OAAO,CAAC,SAAUJ,GACQ,iBAAZC,QACdA,QAA2B,kBAAID,EAAQG,QAAQ,UAE/CJ,EAAwB,kBAAIC,EAAQD,EAAY,MACjD,CATD,CASGO,MAAOC,G,qHCTV,aAGa,EAAAC,oBAAsBC,EAAMC,mBAAgDC,E,+FCHzF,aAGA,QAOA,gCAAqCC,GACnC,OACE,gBAAC,EAAAJ,oBAAoBK,SAAQ,CAACC,MAAOF,EAAMG,KAAMH,EAAMI,SAE3D,C,0FCZA,aAEA,2BACEC,EACAC,GAIA,YAJA,IAAAA,IAAAA,EAAA,KAEY,IAAAC,UAEDC,SAASH,EAAYC,EAClC,C,0fCVA,WAGA,YAGA,YACA,YACA,UACA,WACA,W,iFCXA,aAGA,QAEA,oBAGE,OAFYT,EAAMY,WAAW,EAAAb,oBAG/B,C,kFCTA,aAEA,SAMA,uBACE,IAAMO,GAAM,IAAAI,UACNG,EAAgBP,EAAIQ,UAEpB,EAAwBd,EAAMe,SAASF,GAAtCC,EAAO,KAAEE,EAAU,KAE1B,OAAIF,GAIJd,EAAMiB,WAAU,WACd,SAASC,IACPF,GAAW,EACb,CAIA,OAFAV,EAAIa,GAAG,QAASD,GAET,WACLZ,EAAIc,IAAI,QAASF,EACnB,CACF,GAAG,IAbM,CAAEJ,QAAO,EAgBpB,C,qFC7BA,aAEA,uBACEN,EACAa,EACAZ,GAIA,YAJA,IAAAA,IAAAA,EAAA,KAEY,IAAAC,UAEDY,YAAYd,EAAYa,EAAaZ,EAClD,C,uFCVA,aAEA,wBACED,EACAC,GAIA,YAJA,IAAAA,IAAAA,EAAA,KAEY,IAAAC,UAEDa,aAAaf,EAAYC,EACtC,C,UCXAhB,EAAOD,QAAUM,C,GCCb0B,EAA2B,CAAC,E,OAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBxB,IAAjByB,EACH,OAAOA,EAAanC,QAGrB,IAAIC,EAAS+B,EAAyBE,GAAY,CAGjDlC,QAAS,CAAC,GAOX,OAHAoC,EAAoBF,GAAUG,KAAKpC,EAAOD,QAASC,EAAQA,EAAOD,QAASiC,GAGpEhC,EAAOD,OACf,CCnB0BiC,CAAoB,G","sources":["webpack://FeaturevisorReact/webpack/universalModuleDefinition","webpack://FeaturevisorReact/./src/FeaturevisorContext.ts","webpack://FeaturevisorReact/./src/FeaturevisorProvider.tsx","webpack://FeaturevisorReact/./src/activateFeature.ts","webpack://FeaturevisorReact/./src/index.ts","webpack://FeaturevisorReact/./src/useSdk.ts","webpack://FeaturevisorReact/./src/useStatus.ts","webpack://FeaturevisorReact/./src/useVariable.ts","webpack://FeaturevisorReact/./src/useVariation.ts","webpack://FeaturevisorReact/external umd {\"commonjs\":\"react\",\"commonjs2\":\"react\",\"amd\":\"react\",\"root\":\"React\"}","webpack://FeaturevisorReact/webpack/bootstrap","webpack://FeaturevisorReact/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FeaturevisorReact\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"FeaturevisorReact\"] = factory(root[\"React\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE__359__) => {\nreturn ","import * as React from \"react\";\nimport { FeaturevisorInstance } from \"@featurevisor/sdk\";\n\nexport const FeaturevisorContext = React.createContext<FeaturevisorInstance | undefined>(undefined);\n","import * as React from \"react\";\nimport { FeaturevisorInstance } from \"@featurevisor/sdk\";\n\nimport { FeaturevisorContext } from \"./FeaturevisorContext\";\n\nexport interface FeaturevisorProviderProps {\n sdk: FeaturevisorInstance;\n children: React.ReactNode;\n}\n\nexport function FeaturevisorProvider(props: FeaturevisorProviderProps) {\n return (\n <FeaturevisorContext.Provider value={props.sdk}>{props.children}</FeaturevisorContext.Provider>\n );\n}\n","import { Context, FeatureKey, VariationValue } from \"@featurevisor/types\";\n\nimport { useSdk } from \"./useSdk\";\n\nexport function activateFeature(\n featureKey: FeatureKey,\n context: Context = {},\n): VariationValue | undefined {\n const sdk = useSdk();\n\n return sdk.activate(featureKey, context);\n}\n","// contexts\nexport * from \"./FeaturevisorContext\";\n\n// components\nexport * from \"./FeaturevisorProvider\";\n\n// hooks\nexport * from \"./activateFeature\";\nexport * from \"./useSdk\";\nexport * from \"./useStatus\";\nexport * from \"./useVariable\";\nexport * from \"./useVariation\";\n","import * as React from \"react\";\nimport { FeaturevisorInstance } from \"@featurevisor/sdk\";\n\nimport { FeaturevisorContext } from \"./FeaturevisorContext\";\n\nexport function useSdk(): FeaturevisorInstance {\n const sdk = React.useContext(FeaturevisorContext);\n\n return sdk as FeaturevisorInstance;\n}\n","import * as React from \"react\";\n\nimport { useSdk } from \"./useSdk\";\n\nexport interface Status {\n isReady: boolean;\n}\n\nexport function useStatus(): Status {\n const sdk = useSdk();\n const initialStatus = sdk.isReady();\n\n const [isReady, setIsReady] = React.useState(initialStatus);\n\n if (isReady) {\n return { isReady };\n }\n\n React.useEffect(function () {\n function handleReady() {\n setIsReady(true);\n }\n\n sdk.on(\"ready\", handleReady);\n\n return function () {\n sdk.off(\"ready\", handleReady);\n };\n }, []);\n\n return { isReady };\n}\n","import { Context, FeatureKey, VariableKey, VariableValue } from \"@featurevisor/types\";\n\nimport { useSdk } from \"./useSdk\";\n\nexport function useVariable(\n featureKey: FeatureKey,\n variableKey: VariableKey,\n context: Context = {},\n): VariableValue | undefined {\n const sdk = useSdk();\n\n return sdk.getVariable(featureKey, variableKey, context);\n}\n","import { Context, FeatureKey, VariationValue } from \"@featurevisor/types\";\n\nimport { useSdk } from \"./useSdk\";\n\nexport function useVariation(\n featureKey: FeatureKey,\n context: Context = {},\n): VariationValue | undefined {\n const sdk = useSdk();\n\n return sdk.getVariation(featureKey, context);\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__359__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(97);\n"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE__359__","FeaturevisorContext","React","createContext","undefined","props","Provider","value","sdk","children","featureKey","context","useSdk","activate","useContext","initialStatus","isReady","useState","setIsReady","useEffect","handleReady","on","off","variableKey","getVariable","getVariation","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call"],"sourceRoot":""}
1
+ {"version":3,"file":"index.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,EAAQG,QAAQ,UACR,mBAAXC,QAAyBA,OAAOC,IAC9CD,OAAO,CAAC,SAAUJ,GACQ,iBAAZC,QACdA,QAA2B,kBAAID,EAAQG,QAAQ,UAE/CJ,EAAwB,kBAAIC,EAAQD,EAAY,MACjD,CATD,CASGO,MAAOC,G,qHCTV,aAGa,EAAAC,oBAAsBC,EAAMC,mBAAgDC,E,+FCHzF,aAGA,QAOA,gCAAqCC,GACnC,OACE,gBAAC,EAAAJ,oBAAoBK,SAAQ,CAACC,MAAOF,EAAMG,KAAMH,EAAMI,SAE3D,C,0FCZA,aAEA,2BACEC,EACAC,GAIA,YAJA,IAAAA,IAAAA,EAAA,KAEY,IAAAC,UAEDC,SAASH,EAAYC,EAClC,C,0fCVA,WAGA,YAGA,YACA,YACA,UACA,WACA,YACA,W,kFCVA,aAEA,mBAAwBD,EAAwBC,GAG9C,YAH8C,IAAAA,IAAAA,EAAA,KAClC,IAAAC,UAEDE,UAAUJ,EAAYC,EACnC,C,iFCRA,aAGA,QAEA,oBAGE,OAFYT,EAAMa,WAAW,EAAAd,oBAG/B,C,kFCTA,aAEA,SAMA,uBACE,IAAMO,GAAM,IAAAI,UACNI,EAAgBR,EAAIS,UAEpB,EAAwBf,EAAMgB,SAASF,GAAtCC,EAAO,KAAEE,EAAU,KAE1B,OAAIF,GAIJf,EAAMkB,WAAU,WACd,SAASC,IACPF,GAAW,EACb,CAIA,OAFAX,EAAIc,GAAG,QAASD,GAET,WACLb,EAAIe,IAAI,QAASF,EACnB,CACF,GAAG,IAbM,CAAEJ,QAAO,EAgBpB,C,qFC7BA,aAEA,uBACEP,EACAc,EACAb,GAIA,YAJA,IAAAA,IAAAA,EAAA,KAEY,IAAAC,UAEDa,YAAYf,EAAYc,EAAab,EAClD,C,uFCVA,aAEA,wBACED,EACAC,GAIA,YAJA,IAAAA,IAAAA,EAAA,KAEY,IAAAC,UAEDc,aAAahB,EAAYC,EACtC,C,UCXAhB,EAAOD,QAAUM,C,GCCb2B,EAA2B,CAAC,E,OAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBzB,IAAjB0B,EACH,OAAOA,EAAapC,QAGrB,IAAIC,EAASgC,EAAyBE,GAAY,CAGjDnC,QAAS,CAAC,GAOX,OAHAqC,EAAoBF,GAAUG,KAAKrC,EAAOD,QAASC,EAAQA,EAAOD,QAASkC,GAGpEjC,EAAOD,OACf,CCnB0BkC,CAAoB,G","sources":["webpack://FeaturevisorReact/webpack/universalModuleDefinition","webpack://FeaturevisorReact/./src/FeaturevisorContext.ts","webpack://FeaturevisorReact/./src/FeaturevisorProvider.tsx","webpack://FeaturevisorReact/./src/activateFeature.ts","webpack://FeaturevisorReact/./src/index.ts","webpack://FeaturevisorReact/./src/useFlag.ts","webpack://FeaturevisorReact/./src/useSdk.ts","webpack://FeaturevisorReact/./src/useStatus.ts","webpack://FeaturevisorReact/./src/useVariable.ts","webpack://FeaturevisorReact/./src/useVariation.ts","webpack://FeaturevisorReact/external umd {\"commonjs\":\"react\",\"commonjs2\":\"react\",\"amd\":\"react\",\"root\":\"React\"}","webpack://FeaturevisorReact/webpack/bootstrap","webpack://FeaturevisorReact/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FeaturevisorReact\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"FeaturevisorReact\"] = factory(root[\"React\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE__359__) => {\nreturn ","import * as React from \"react\";\nimport { FeaturevisorInstance } from \"@featurevisor/sdk\";\n\nexport const FeaturevisorContext = React.createContext<FeaturevisorInstance | undefined>(undefined);\n","import * as React from \"react\";\nimport { FeaturevisorInstance } from \"@featurevisor/sdk\";\n\nimport { FeaturevisorContext } from \"./FeaturevisorContext\";\n\nexport interface FeaturevisorProviderProps {\n sdk: FeaturevisorInstance;\n children: React.ReactNode;\n}\n\nexport function FeaturevisorProvider(props: FeaturevisorProviderProps) {\n return (\n <FeaturevisorContext.Provider value={props.sdk}>{props.children}</FeaturevisorContext.Provider>\n );\n}\n","import { Context, FeatureKey, VariationValue } from \"@featurevisor/types\";\n\nimport { useSdk } from \"./useSdk\";\n\nexport function activateFeature(\n featureKey: FeatureKey,\n context: Context = {},\n): VariationValue | undefined {\n const sdk = useSdk();\n\n return sdk.activate(featureKey, context);\n}\n","// contexts\nexport * from \"./FeaturevisorContext\";\n\n// components\nexport * from \"./FeaturevisorProvider\";\n\n// hooks\nexport * from \"./activateFeature\";\nexport * from \"./useSdk\";\nexport * from \"./useStatus\";\nexport * from \"./useVariable\";\nexport * from \"./useVariation\";\nexport * from \"./useFlag\";\n","import { Context, FeatureKey } from \"@featurevisor/types\";\n\nimport { useSdk } from \"./useSdk\";\n\nexport function useFlag(featureKey: FeatureKey, context: Context = {}): boolean {\n const sdk = useSdk();\n\n return sdk.isEnabled(featureKey, context);\n}\n","import * as React from \"react\";\nimport { FeaturevisorInstance } from \"@featurevisor/sdk\";\n\nimport { FeaturevisorContext } from \"./FeaturevisorContext\";\n\nexport function useSdk(): FeaturevisorInstance {\n const sdk = React.useContext(FeaturevisorContext);\n\n return sdk as FeaturevisorInstance;\n}\n","import * as React from \"react\";\n\nimport { useSdk } from \"./useSdk\";\n\nexport interface Status {\n isReady: boolean;\n}\n\nexport function useStatus(): Status {\n const sdk = useSdk();\n const initialStatus = sdk.isReady();\n\n const [isReady, setIsReady] = React.useState(initialStatus);\n\n if (isReady) {\n return { isReady };\n }\n\n React.useEffect(function () {\n function handleReady() {\n setIsReady(true);\n }\n\n sdk.on(\"ready\", handleReady);\n\n return function () {\n sdk.off(\"ready\", handleReady);\n };\n }, []);\n\n return { isReady };\n}\n","import { Context, FeatureKey, VariableKey, VariableValue } from \"@featurevisor/types\";\n\nimport { useSdk } from \"./useSdk\";\n\nexport function useVariable(\n featureKey: FeatureKey,\n variableKey: VariableKey,\n context: Context = {},\n): VariableValue | undefined {\n const sdk = useSdk();\n\n return sdk.getVariable(featureKey, variableKey, context);\n}\n","import { Context, FeatureKey, VariationValue } from \"@featurevisor/types\";\n\nimport { useSdk } from \"./useSdk\";\n\nexport function useVariation(\n featureKey: FeatureKey,\n context: Context = {},\n): VariationValue | undefined {\n const sdk = useSdk();\n\n return sdk.getVariation(featureKey, context);\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__359__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(97);\n"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE__359__","FeaturevisorContext","React","createContext","undefined","props","Provider","value","sdk","children","featureKey","context","useSdk","activate","isEnabled","useContext","initialStatus","isReady","useState","setIsReady","useEffect","handleReady","on","off","variableKey","getVariable","getVariation","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call"],"sourceRoot":""}
package/lib/index.d.ts CHANGED
@@ -5,3 +5,4 @@ export * from "./useSdk";
5
5
  export * from "./useStatus";
6
6
  export * from "./useVariable";
7
7
  export * from "./useVariation";
8
+ export * from "./useFlag";
package/lib/index.js CHANGED
@@ -8,4 +8,5 @@ export * from "./useSdk";
8
8
  export * from "./useStatus";
9
9
  export * from "./useVariable";
10
10
  export * from "./useVariation";
11
+ export * from "./useFlag";
11
12
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,cAAc,uBAAuB,CAAC;AAEtC,aAAa;AACb,cAAc,wBAAwB,CAAC;AAEvC,QAAQ;AACR,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,cAAc,uBAAuB,CAAC;AAEtC,aAAa;AACb,cAAc,wBAAwB,CAAC;AAEvC,QAAQ;AACR,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Context, FeatureKey } from "@featurevisor/types";
2
+ export declare function useFlag(featureKey: FeatureKey, context?: Context): boolean;
package/lib/useFlag.js ADDED
@@ -0,0 +1,7 @@
1
+ import { useSdk } from "./useSdk";
2
+ export function useFlag(featureKey, context) {
3
+ if (context === void 0) { context = {}; }
4
+ var sdk = useSdk();
5
+ return sdk.isEnabled(featureKey, context);
6
+ }
7
+ //# sourceMappingURL=useFlag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFlag.js","sourceRoot":"","sources":["../src/useFlag.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,UAAU,OAAO,CAAC,UAAsB,EAAE,OAAqB;IAArB,wBAAA,EAAA,YAAqB;IACnE,IAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IAErB,OAAO,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1 @@
1
+ import "@testing-library/jest-dom";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@featurevisor/react",
3
- "version": "0.39.0",
3
+ "version": "0.40.0",
4
4
  "description": "React package for Featurevisor",
5
5
  "main": "dist/index.js",
6
6
  "module": "lib/index.js",
@@ -42,8 +42,8 @@
42
42
  "url": "https://github.com/fahad19/featurevisor/issues"
43
43
  },
44
44
  "dependencies": {
45
- "@featurevisor/sdk": "^0.39.0",
46
- "@featurevisor/types": "^0.39.0"
45
+ "@featurevisor/sdk": "^0.40.0",
46
+ "@featurevisor/types": "^0.40.0"
47
47
  },
48
48
  "license": "MIT",
49
49
  "devDependencies": {
@@ -51,5 +51,5 @@
51
51
  "@testing-library/react": "^14.0.0",
52
52
  "jest-environment-jsdom": "^29.5.0"
53
53
  },
54
- "gitHead": "bbf3b7a19d05b2f02a4836eb5ab2409b686413d3"
54
+ "gitHead": "7915a3f4f1429e5da4ef0da076da02d4d3c24776"
55
55
  }
package/src/index.ts CHANGED
@@ -10,3 +10,4 @@ export * from "./useSdk";
10
10
  export * from "./useStatus";
11
11
  export * from "./useVariable";
12
12
  export * from "./useVariation";
13
+ export * from "./useFlag";
@@ -0,0 +1,72 @@
1
+ import * as React from "react";
2
+ import { render, screen } from "@testing-library/react";
3
+ import "@testing-library/jest-dom";
4
+
5
+ import { FeaturevisorProvider } from "./FeaturevisorProvider";
6
+ import { useFlag } from "./useFlag";
7
+ import { createInstance } from "@featurevisor/sdk";
8
+
9
+ function getNewInstance(enabled = true) {
10
+ const sdk = createInstance({
11
+ datafile: {
12
+ schemaVersion: "1",
13
+ revision: "1.0",
14
+ features: [
15
+ {
16
+ key: "test",
17
+ bucketBy: "userId",
18
+ traffic: [
19
+ {
20
+ key: "1",
21
+ segments: "*",
22
+ percentage: enabled ? 100000 : 0,
23
+ allocation: [],
24
+ },
25
+ ],
26
+ },
27
+ ],
28
+ attributes: [],
29
+ segments: [],
30
+ },
31
+ });
32
+
33
+ return sdk;
34
+ }
35
+
36
+ describe("react: useFlag", function () {
37
+ test("should be a function", function () {
38
+ expect(useFlag).toBeInstanceOf(Function);
39
+ });
40
+
41
+ test("should check if feature is enabled", function () {
42
+ function TestComponent() {
43
+ const isEnabled = useFlag("test", { userId: "1" });
44
+
45
+ return isEnabled ? <p>True</p> : <p>False</p>;
46
+ }
47
+
48
+ render(
49
+ <FeaturevisorProvider sdk={getNewInstance()}>
50
+ <TestComponent />
51
+ </FeaturevisorProvider>,
52
+ );
53
+
54
+ expect(screen.getByText("True")).toBeInTheDocument();
55
+ });
56
+
57
+ test("should check if feature is disabled", function () {
58
+ function TestComponent() {
59
+ const isEnabled = useFlag("test", { userId: "1" });
60
+
61
+ return isEnabled ? <p>True</p> : <p>False</p>;
62
+ }
63
+
64
+ render(
65
+ <FeaturevisorProvider sdk={getNewInstance(false)}>
66
+ <TestComponent />
67
+ </FeaturevisorProvider>,
68
+ );
69
+
70
+ expect(screen.getByText("False")).toBeInTheDocument();
71
+ });
72
+ });
package/src/useFlag.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { Context, FeatureKey } from "@featurevisor/types";
2
+
3
+ import { useSdk } from "./useSdk";
4
+
5
+ export function useFlag(featureKey: FeatureKey, context: Context = {}): boolean {
6
+ const sdk = useSdk();
7
+
8
+ return sdk.isEnabled(featureKey, context);
9
+ }