@featurevisor/react 2.3.3 → 2.4.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,17 @@
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
+ # [2.4.0](https://github.com/featurevisor/featurevisor/compare/v2.3.3...v2.4.0) (2025-12-28)
7
+
8
+
9
+ ### Features
10
+
11
+ * useFeaturevisor hook in React package ([#380](https://github.com/featurevisor/featurevisor/issues/380)) ([5dedf70](https://github.com/featurevisor/featurevisor/commit/5dedf70fc79e5e6a1dd4b136c6ba08ea2deebc51))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [2.3.3](https://github.com/featurevisor/featurevisor/compare/v2.3.2...v2.3.3) (2025-11-29)
7
18
 
8
19
  **Note:** Version bump only for package @featurevisor/react
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={253:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FeaturevisorContext=void 0;var n=r(12);t.FeaturevisorContext=n.createContext(void 0)},567:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FeaturevisorProvider=function(e){return n.createElement(o.FeaturevisorContext.Provider,{value:e.instance},e.children)};var n=r(12),o=r(253)},869:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),o=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),o(r(253),t),o(r(567),t),o(r(316),t),o(r(926),t),o(r(929),t),o(r(940),t),o(r(576),t)},576:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.onFeatureChange=function(e,t,r){var n=e.on("datafile_set",(function(e){var n=e.features;Array.isArray(n)&&n.indexOf(t)>-1&&r()})),o=e.on("context_set",(function(){r()})),a=e.on("sticky_set",(function(e){var n=e.features;Array.isArray(n)&&n.indexOf(t)>-1&&r()}));return function(){n(),o(),a()}}},940:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useFlag=function(e,t){void 0===t&&(t={});var r=(0,o.useSdk)(),u=r.isEnabled(e,t),i=(0,n.useState)(u),c=i[0],s=i[1];return(0,n.useEffect)((function(){var n=(0,a.onFeatureChange)(r,e,(function(){var n=r.isEnabled(e,t);n!==c&&s(n)}));return function(){n()}}),[e,t]),c};var n=r(12),o=r(316),a=r(576)},316:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useSdk=function(){return n.useContext(o.FeaturevisorContext)};var n=r(12),o=r(253)},926:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useVariable=function(e,t,r){void 0===r&&(r={});var u=(0,o.useSdk)(),i=u.getVariable(e,t,r),c=(0,n.useState)(i),s=c[0],f=c[1];return(0,n.useEffect)((function(){var n=(0,a.onFeatureChange)(u,e,(function(){var n=u.getVariable(e,t,r);n!==s&&f(n)}));return function(){n()}}),[e,t,r]),s};var n=r(12),o=r(316),a=r(576)},929:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useVariation=function(e,t){void 0===t&&(t={});var r=(0,o.useSdk)(),u=r.getVariation(e,t),i=(0,n.useState)(u),c=i[0],s=i[1];return(0,n.useEffect)((function(){var n=(0,a.onFeatureChange)(r,e,(function(){var n=r.getVariation(e,t);n!==c&&s(n)}));return function(){n()}}),[e,t]),c};var n=r(12),o=r(316),a=r(576)},12:t=>{t.exports=e}},r={};return function e(n){var o=r[n];if(void 0!==o)return o.exports;var a=r[n]={exports:{}};return t[n].call(a.exports,a,a.exports,e),a.exports}(869)})()));
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={253:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FeaturevisorContext=void 0;var n=r(12);t.FeaturevisorContext=n.createContext(void 0)},567:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FeaturevisorProvider=function(e){return n.createElement(o.FeaturevisorContext.Provider,{value:e.instance},e.children)};var n=r(12),o=r(253)},869:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),o=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),o(r(253),t),o(r(567),t),o(r(316),t),o(r(926),t),o(r(929),t),o(r(940),t),o(r(576),t)},576:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.onFeatureChange=function(e,t,r){var n=e.on("datafile_set",(function(e){var n=e.features;Array.isArray(n)&&n.indexOf(t)>-1&&r()})),o=e.on("context_set",(function(){r()})),u=e.on("sticky_set",(function(e){var n=e.features;Array.isArray(n)&&n.indexOf(t)>-1&&r()}));return function(){n(),o(),u()}}},940:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useFlag=function(e,t){void 0===t&&(t={});var r=(0,o.useSdk)(),a=r.isEnabled(e,t),i=(0,n.useState)(a),c=i[0],s=i[1];return(0,n.useEffect)((function(){var n=(0,u.onFeatureChange)(r,e,(function(){var n=r.isEnabled(e,t);n!==c&&s(n)}));return function(){n()}}),[e,t]),c};var n=r(12),o=r(316),u=r(576)},316:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useSdk=u,t.useFeaturevisor=function(){return u()};var n=r(12),o=r(253);function u(){return n.useContext(o.FeaturevisorContext)}},926:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useVariable=function(e,t,r){void 0===r&&(r={});var a=(0,o.useSdk)(),i=a.getVariable(e,t,r),c=(0,n.useState)(i),s=c[0],f=c[1];return(0,n.useEffect)((function(){var n=(0,u.onFeatureChange)(a,e,(function(){var n=a.getVariable(e,t,r);n!==s&&f(n)}));return function(){n()}}),[e,t,r]),s};var n=r(12),o=r(316),u=r(576)},929:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.useVariation=function(e,t){void 0===t&&(t={});var r=(0,o.useSdk)(),a=r.getVariation(e,t),i=(0,n.useState)(a),c=i[0],s=i[1];return(0,n.useEffect)((function(){var n=(0,u.onFeatureChange)(r,e,(function(){var n=r.getVariation(e,t);n!==c&&s(n)}));return function(){n()}}),[e,t]),c};var n=r(12),o=r(316),u=r(576)},12:t=>{t.exports=e}},r={};return function e(n){var o=r[n];if(void 0!==o)return o.exports;var u=r[n]={exports:{}};return t[n].call(u.exports,u,u.exports,e),u.exports}(869)})()));
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":"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","sources":["webpack://FeaturevisorReact/webpack/universalModuleDefinition","webpack://FeaturevisorReact/./src/FeaturevisorContext.ts","webpack://FeaturevisorReact/./src/FeaturevisorProvider.tsx","webpack://FeaturevisorReact/./src/index.ts","webpack://FeaturevisorReact/./src/onFeatureChange.ts","webpack://FeaturevisorReact/./src/useFlag.ts","webpack://FeaturevisorReact/./src/useSdk.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__12__) => {\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 instance: FeaturevisorInstance;\n children: React.ReactNode;\n}\n\nexport function FeaturevisorProvider(props: FeaturevisorProviderProps) {\n return (\n <FeaturevisorContext.Provider value={props.instance}>\n {props.children}\n </FeaturevisorContext.Provider>\n );\n}\n","// contexts\nexport * from \"./FeaturevisorContext\";\n\n// components\nexport * from \"./FeaturevisorProvider\";\n\n// hooks\nexport * from \"./useSdk\";\nexport * from \"./useVariable\";\nexport * from \"./useVariation\";\nexport * from \"./useFlag\";\n\n// utils\nexport * from \"./onFeatureChange\";\n","import { FeaturevisorInstance } from \"@featurevisor/sdk\";\nimport type { FeatureKey } from \"@featurevisor/types\";\n\nexport function onFeatureChange(sdk: FeaturevisorInstance, featureKey: FeatureKey, fn) {\n // datafile_set\n const unsubscribeDatafileSet = sdk.on(\"datafile_set\", ({ features }) => {\n if (Array.isArray(features) && features.indexOf(featureKey) > -1) {\n fn();\n }\n });\n\n // context_set\n const unsubscribeContextSet = sdk.on(\"context_set\", () => {\n fn();\n });\n\n // sticky_set\n const unsubscribeStickySet = sdk.on(\"sticky_set\", ({ features }) => {\n if (Array.isArray(features) && features.indexOf(featureKey) > -1) {\n fn();\n }\n });\n\n return function () {\n unsubscribeDatafileSet();\n unsubscribeContextSet();\n unsubscribeStickySet();\n };\n}\n","import { useEffect, useState } from \"react\";\n\nimport type { Context, FeatureKey } from \"@featurevisor/types\";\n\nimport { useSdk } from \"./useSdk\";\nimport { onFeatureChange } from \"./onFeatureChange\";\n\nexport function useFlag(featureKey: FeatureKey, context: Context = {}): boolean {\n const sdk = useSdk();\n const initialValue = sdk.isEnabled(featureKey, context);\n const [isEnabled, setIsEnabled] = useState(initialValue);\n\n useEffect(() => {\n const unsubscribe = onFeatureChange(sdk, featureKey, () => {\n const newValue = sdk.isEnabled(featureKey, context);\n\n if (newValue !== isEnabled) {\n setIsEnabled(newValue);\n }\n });\n\n return () => {\n unsubscribe();\n };\n }, [featureKey, context]);\n\n return isEnabled;\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 { useEffect, useState } from \"react\";\n\nimport type { Context, FeatureKey, VariableKey, VariableValue } from \"@featurevisor/types\";\n\nimport { useSdk } from \"./useSdk\";\nimport { onFeatureChange } from \"./onFeatureChange\";\n\nexport function useVariable(\n featureKey: FeatureKey,\n variableKey: VariableKey,\n context: Context = {},\n): VariableValue | null {\n const sdk = useSdk();\n const initialValue = sdk.getVariable(featureKey, variableKey, context);\n const [variableValue, setVariableValue] = useState<VariableValue | null>(initialValue);\n\n useEffect(() => {\n const unsubscribe = onFeatureChange(sdk, featureKey, () => {\n const newValue = sdk.getVariable(featureKey, variableKey, context);\n\n if (newValue !== variableValue) {\n setVariableValue(newValue);\n }\n });\n\n return () => {\n unsubscribe();\n };\n }, [featureKey, variableKey, context]);\n\n return variableValue;\n}\n","import { useEffect, useState } from \"react\";\n\nimport { Context, FeatureKey, VariationValue } from \"@featurevisor/types\";\n\nimport { useSdk } from \"./useSdk\";\nimport { onFeatureChange } from \"./onFeatureChange\";\n\nexport function useVariation(featureKey: FeatureKey, context: Context = {}): VariationValue | null {\n const sdk = useSdk();\n const initialValue = sdk.getVariation(featureKey, context);\n const [variationValue, setVariationValue] = useState<VariationValue | null>(initialValue);\n\n useEffect(() => {\n const unsubscribe = onFeatureChange(sdk, featureKey, () => {\n const newValue = sdk.getVariation(featureKey, context);\n\n if (newValue !== variationValue) {\n setVariationValue(newValue);\n }\n });\n\n return () => {\n unsubscribe();\n };\n }, [featureKey, context]);\n\n return variationValue;\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__12__;","// 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__(869);\n"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE__12__","FeaturevisorContext","React","createContext","undefined","props","Provider","value","instance","children","sdk","featureKey","fn","unsubscribeDatafileSet","on","features","Array","isArray","indexOf","unsubscribeContextSet","unsubscribeStickySet","context","useSdk","initialValue","isEnabled","useState","setIsEnabled","useEffect","unsubscribe","onFeatureChange","newValue","useContext","variableKey","getVariable","variableValue","setVariableValue","getVariation","variationValue","setVariationValue","__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,sHCTV,YAGa,EAAAC,oBAAsBC,EAAMC,mBAAgDC,E,iECOzF,gCAAqCC,GACnC,OACE,gBAAC,EAAAJ,oBAAoBK,SAAQ,CAACC,MAAOF,EAAMG,UACxCH,EAAMI,SAGb,EAhBA,YAGA,Q,2fCFA,YAGA,YAGA,YACA,YACA,YACA,YAGA,W,+DCVA,2BAAgCC,EAA2BC,EAAwBC,GAEjF,IAAMC,EAAyBH,EAAII,GAAG,gBAAgB,SAAC,G,IAAEC,EAAQ,WAC3DC,MAAMC,QAAQF,IAAaA,EAASG,QAAQP,IAAe,GAC7DC,GAEJ,IAGMO,EAAwBT,EAAII,GAAG,eAAe,WAClDF,GACF,IAGMQ,EAAuBV,EAAII,GAAG,cAAc,SAAC,G,IAAEC,EAAQ,WACvDC,MAAMC,QAAQF,IAAaA,EAASG,QAAQP,IAAe,GAC7DC,GAEJ,IAEA,OAAO,WACLC,IACAM,IACAC,GACF,CACF,C,iECrBA,mBAAwBT,EAAwBU,QAAA,IAAAA,IAAAA,EAAA,IAC9C,IAAMX,GAAM,IAAAY,UACNC,EAAeb,EAAIc,UAAUb,EAAYU,GACzC,GAA4B,IAAAI,UAASF,GAApCC,EAAS,KAAEE,EAAY,KAgB9B,OAdA,IAAAC,YAAU,WACR,IAAMC,GAAc,IAAAC,iBAAgBnB,EAAKC,GAAY,WACnD,IAAMmB,EAAWpB,EAAIc,UAAUb,EAAYU,GAEvCS,IAAaN,GACfE,EAAaI,EAEjB,IAEA,OAAO,WACLF,GACF,CACF,GAAG,CAACjB,EAAYU,IAETG,CACT,EA3BA,YAIA,SACA,Q,iECAA,WAMA,6BACE,OAAOF,GACT,EAbA,YAGA,SAEA,SAAgBA,IAGd,OAFYpB,EAAM6B,WAAW,EAAA9B,oBAG/B,C,iECFA,uBACEU,EACAqB,EACAX,QAAA,IAAAA,IAAAA,EAAA,IAEA,IAAMX,GAAM,IAAAY,UACNC,EAAeb,EAAIuB,YAAYtB,EAAYqB,EAAaX,GACxD,GAAoC,IAAAI,UAA+BF,GAAlEW,EAAa,KAAEC,EAAgB,KAgBtC,OAdA,IAAAR,YAAU,WACR,IAAMC,GAAc,IAAAC,iBAAgBnB,EAAKC,GAAY,WACnD,IAAMmB,EAAWpB,EAAIuB,YAAYtB,EAAYqB,EAAaX,GAEtDS,IAAaI,GACfC,EAAiBL,EAErB,IAEA,OAAO,WACLF,GACF,CACF,GAAG,CAACjB,EAAYqB,EAAaX,IAEtBa,CACT,EA/BA,YAIA,SACA,Q,iECEA,wBAA6BvB,EAAwBU,QAAA,IAAAA,IAAAA,EAAA,IACnD,IAAMX,GAAM,IAAAY,UACNC,EAAeb,EAAI0B,aAAazB,EAAYU,GAC5C,GAAsC,IAAAI,UAAgCF,GAArEc,EAAc,KAAEC,EAAiB,KAgBxC,OAdA,IAAAX,YAAU,WACR,IAAMC,GAAc,IAAAC,iBAAgBnB,EAAKC,GAAY,WACnD,IAAMmB,EAAWpB,EAAI0B,aAAazB,EAAYU,GAE1CS,IAAaO,GACfC,EAAkBR,EAEtB,IAEA,OAAO,WACLF,GACF,CACF,GAAG,CAACjB,EAAYU,IAETgB,CACT,EA3BA,YAIA,SACA,Q,SCLA1C,EAAOD,QAAUM,C,GCCbuC,EAA2B,CAAC,E,OAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBrC,IAAjBsC,EACH,OAAOA,EAAahD,QAGrB,IAAIC,EAAS4C,EAAyBE,GAAY,CAGjD/C,QAAS,CAAC,GAOX,OAHAiD,EAAoBF,GAAUG,KAAKjD,EAAOD,QAASC,EAAQA,EAAOD,QAAS8C,GAGpE7C,EAAOD,OACf,CCnB0B8C,CAAoB,I","sources":["webpack://FeaturevisorReact/webpack/universalModuleDefinition","webpack://FeaturevisorReact/./src/FeaturevisorContext.ts","webpack://FeaturevisorReact/./src/FeaturevisorProvider.tsx","webpack://FeaturevisorReact/./src/index.ts","webpack://FeaturevisorReact/./src/onFeatureChange.ts","webpack://FeaturevisorReact/./src/useFlag.ts","webpack://FeaturevisorReact/./src/useSdk.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__12__) => {\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 instance: FeaturevisorInstance;\n children: React.ReactNode;\n}\n\nexport function FeaturevisorProvider(props: FeaturevisorProviderProps) {\n return (\n <FeaturevisorContext.Provider value={props.instance}>\n {props.children}\n </FeaturevisorContext.Provider>\n );\n}\n","// contexts\nexport * from \"./FeaturevisorContext\";\n\n// components\nexport * from \"./FeaturevisorProvider\";\n\n// hooks\nexport * from \"./useSdk\";\nexport * from \"./useVariable\";\nexport * from \"./useVariation\";\nexport * from \"./useFlag\";\n\n// utils\nexport * from \"./onFeatureChange\";\n","import { FeaturevisorInstance } from \"@featurevisor/sdk\";\nimport type { FeatureKey } from \"@featurevisor/types\";\n\nexport function onFeatureChange(sdk: FeaturevisorInstance, featureKey: FeatureKey, fn) {\n // datafile_set\n const unsubscribeDatafileSet = sdk.on(\"datafile_set\", ({ features }) => {\n if (Array.isArray(features) && features.indexOf(featureKey) > -1) {\n fn();\n }\n });\n\n // context_set\n const unsubscribeContextSet = sdk.on(\"context_set\", () => {\n fn();\n });\n\n // sticky_set\n const unsubscribeStickySet = sdk.on(\"sticky_set\", ({ features }) => {\n if (Array.isArray(features) && features.indexOf(featureKey) > -1) {\n fn();\n }\n });\n\n return function () {\n unsubscribeDatafileSet();\n unsubscribeContextSet();\n unsubscribeStickySet();\n };\n}\n","import { useEffect, useState } from \"react\";\n\nimport type { Context, FeatureKey } from \"@featurevisor/types\";\n\nimport { useSdk } from \"./useSdk\";\nimport { onFeatureChange } from \"./onFeatureChange\";\n\nexport function useFlag(featureKey: FeatureKey, context: Context = {}): boolean {\n const sdk = useSdk();\n const initialValue = sdk.isEnabled(featureKey, context);\n const [isEnabled, setIsEnabled] = useState(initialValue);\n\n useEffect(() => {\n const unsubscribe = onFeatureChange(sdk, featureKey, () => {\n const newValue = sdk.isEnabled(featureKey, context);\n\n if (newValue !== isEnabled) {\n setIsEnabled(newValue);\n }\n });\n\n return () => {\n unsubscribe();\n };\n }, [featureKey, context]);\n\n return isEnabled;\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\nexport function useFeaturevisor(): FeaturevisorInstance {\n return useSdk();\n}\n","import { useEffect, useState } from \"react\";\n\nimport type { Context, FeatureKey, VariableKey, VariableValue } from \"@featurevisor/types\";\n\nimport { useSdk } from \"./useSdk\";\nimport { onFeatureChange } from \"./onFeatureChange\";\n\nexport function useVariable(\n featureKey: FeatureKey,\n variableKey: VariableKey,\n context: Context = {},\n): VariableValue | null {\n const sdk = useSdk();\n const initialValue = sdk.getVariable(featureKey, variableKey, context);\n const [variableValue, setVariableValue] = useState<VariableValue | null>(initialValue);\n\n useEffect(() => {\n const unsubscribe = onFeatureChange(sdk, featureKey, () => {\n const newValue = sdk.getVariable(featureKey, variableKey, context);\n\n if (newValue !== variableValue) {\n setVariableValue(newValue);\n }\n });\n\n return () => {\n unsubscribe();\n };\n }, [featureKey, variableKey, context]);\n\n return variableValue;\n}\n","import { useEffect, useState } from \"react\";\n\nimport { Context, FeatureKey, VariationValue } from \"@featurevisor/types\";\n\nimport { useSdk } from \"./useSdk\";\nimport { onFeatureChange } from \"./onFeatureChange\";\n\nexport function useVariation(featureKey: FeatureKey, context: Context = {}): VariationValue | null {\n const sdk = useSdk();\n const initialValue = sdk.getVariation(featureKey, context);\n const [variationValue, setVariationValue] = useState<VariationValue | null>(initialValue);\n\n useEffect(() => {\n const unsubscribe = onFeatureChange(sdk, featureKey, () => {\n const newValue = sdk.getVariation(featureKey, context);\n\n if (newValue !== variationValue) {\n setVariationValue(newValue);\n }\n });\n\n return () => {\n unsubscribe();\n };\n }, [featureKey, context]);\n\n return variationValue;\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__12__;","// 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__(869);\n"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE__12__","FeaturevisorContext","React","createContext","undefined","props","Provider","value","instance","children","sdk","featureKey","fn","unsubscribeDatafileSet","on","features","Array","isArray","indexOf","unsubscribeContextSet","unsubscribeStickySet","context","useSdk","initialValue","isEnabled","useState","setIsEnabled","useEffect","unsubscribe","onFeatureChange","newValue","useContext","variableKey","getVariable","variableValue","setVariableValue","getVariation","variationValue","setVariationValue","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call"],"sourceRoot":""}
package/lib/useSdk.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  import { FeaturevisorInstance } from "@featurevisor/sdk";
2
2
  export declare function useSdk(): FeaturevisorInstance;
3
+ export declare function useFeaturevisor(): FeaturevisorInstance;
package/lib/useSdk.js CHANGED
@@ -4,4 +4,7 @@ export function useSdk() {
4
4
  const sdk = React.useContext(FeaturevisorContext);
5
5
  return sdk;
6
6
  }
7
+ export function useFeaturevisor() {
8
+ return useSdk();
9
+ }
7
10
  //# sourceMappingURL=useSdk.js.map
package/lib/useSdk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"useSdk.js","sourceRoot":"","sources":["../src/useSdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,MAAM;IACpB,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAElD,OAAO,GAA2B,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"useSdk.js","sourceRoot":"","sources":["../src/useSdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,MAAM;IACpB,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAElD,OAAO,GAA2B,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,MAAM,EAAE,CAAC;AAClB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@featurevisor/react",
3
- "version": "2.3.3",
3
+ "version": "2.4.0",
4
4
  "description": "React package for Featurevisor",
5
5
  "main": "dist/index.js",
6
6
  "module": "lib/index.js",
@@ -50,5 +50,5 @@
50
50
  "@testing-library/react": "^14.0.0",
51
51
  "jest-environment-jsdom": "^29.5.0"
52
52
  },
53
- "gitHead": "a09f88b38d1630b0f6e70fd5b7288111715d1df6"
53
+ "gitHead": "9d5065516ab94fa174e069202173306a243a7046"
54
54
  }
package/src/useSdk.ts CHANGED
@@ -8,3 +8,7 @@ export function useSdk(): FeaturevisorInstance {
8
8
 
9
9
  return sdk as FeaturevisorInstance;
10
10
  }
11
+
12
+ export function useFeaturevisor(): FeaturevisorInstance {
13
+ return useSdk();
14
+ }