@featurevisor/sdk 0.2.0 → 0.3.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 +11 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/lib/client.d.ts +3 -2
- package/lib/client.js +7 -0
- package/lib/client.js.map +1 -1
- package/lib/feature.js +3 -3
- package/lib/feature.js.map +1 -1
- package/package.json +3 -3
- package/src/client.ts +15 -2
- package/src/feature.ts +3 -3
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
|
+
# [0.3.0](https://github.com/fahad19/featurevisor/compare/v0.2.0...v0.3.0) (2023-03-17)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* support objects as variables ([#18](https://github.com/fahad19/featurevisor/issues/18)) ([c1b6160](https://github.com/fahad19/featurevisor/commit/c1b61609d299bbf2e46c644c4f09336cdd94e128))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# [0.2.0](https://github.com/fahad19/featurevisor/compare/v0.1.0...v0.2.0) (2023-03-16)
|
|
7
18
|
|
|
8
19
|
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.FeaturevisorSDK=t():e.FeaturevisorSDK=t()}(this,(()=>{return e={77:e=>{!function(){const t=e=>(new TextEncoder).encode(e);function r(e,r){let n,i,o,a,u,s,c,f;for("string"==typeof e&&(e=t(e)),n=3&e.length,i=e.length-n,o=r,u=3432918353,s=461845907,f=0;f<i;)c=255&e[f]|(255&e[++f])<<8|(255&e[++f])<<16|(255&e[++f])<<24,++f,c=(65535&c)*u+(((c>>>16)*u&65535)<<16)&4294967295,c=c<<15|c>>>17,c=(65535&c)*s+(((c>>>16)*s&65535)<<16)&4294967295,o^=c,o=o<<13|o>>>19,a=5*(65535&o)+((5*(o>>>16)&65535)<<16)&4294967295,o=27492+(65535&a)+((58964+(a>>>16)&65535)<<16);switch(c=0,n){case 3:c^=(255&e[f+2])<<16;case 2:c^=(255&e[f+1])<<8;case 1:c^=255&e[f],c=(65535&c)*u+(((c>>>16)*u&65535)<<16)&4294967295,c=c<<15|c>>>17,c=(65535&c)*s+(((c>>>16)*s&65535)<<16)&4294967295,o^=c}return o^=e.length,o^=o>>>16,o=2246822507*(65535&o)+((2246822507*(o>>>16)&65535)<<16)&4294967295,o^=o>>>13,o=3266489909*(65535&o)+((3266489909*(o>>>16)&65535)<<16)&4294967295,o^=o>>>16,o>>>0}const n=r;n.v2=function(e,r){"string"==typeof e&&(e=t(e));let n,i=e.length,o=r^i,a=0;for(;i>=4;)n=255&e[a]|(255&e[++a])<<8|(255&e[++a])<<16|(255&e[++a])<<24,n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16),n^=n>>>24,n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16),o=1540483477*(65535&o)+((1540483477*(o>>>16)&65535)<<16)^n,i-=4,++a;switch(i){case 3:o^=(255&e[a+2])<<16;case 2:o^=(255&e[a+1])<<8;case 1:o^=255&e[a],o=1540483477*(65535&o)+((1540483477*(o>>>16)&65535)<<16)}return o^=o>>>13,o=1540483477*(65535&o)+((1540483477*(o>>>16)&65535)<<16),o^=o>>>15,o>>>0},n.v3=r,e.exports=n}()},725:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getBucketedNumber=t.MAX_BUCKETED_NUMBER=void 0;var n=r(77),i=Math.pow(2,32);t.MAX_BUCKETED_NUMBER=1e5,t.getBucketedNumber=function(e){var r=n.v3(e,1)/i;return Math.floor(r*t.MAX_BUCKETED_NUMBER)}},352:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FeaturevisorSDK=t.getValueByType=void 0;var n=r(913),i=r(522),o=r(725);function a(e,t){if(void 0!==e)switch(t){case"string":return"string"==typeof e?e:void 0;case"integer":return parseInt(e,10);case"double":return parseFloat(e);case"boolean":return!0===e;case"array":return Array.isArray(e)?e:void 0;default:return e}}t.getValueByType=a;var u=function(){function e(e){e.onActivation&&(this.onActivation=e.onActivation),e.configureBucketValue&&(this.configureBucketValue=e.configureBucketValue);try{this.datafileReader=new n.DatafileReader("string"==typeof e.datafile?JSON.parse(e.datafile):e.datafile)}catch(e){console.error("Featurevisor could not parse the datafile"),console.error(e)}}return e.prototype.getFeature=function(e){return"string"==typeof e?this.datafileReader.getFeature(e):e},e.prototype.getBucketKey=function(e,t){var r=e.key,n="string"==typeof e.bucketBy?e.bucketBy:e.bucketBy.join("_");return"".concat(n,"_").concat(r)},e.prototype.getBucketValue=function(e,t){var r=this.getBucketKey(e,t),n=(0,o.getBucketedNumber)(r);return this.configureBucketValue?this.configureBucketValue(e,t,n):n},e.prototype.getVariation=function(e,t){void 0===t&&(t={});try{var r=this.getFeature(e);if(!r)return;var n=(0,i.getForcedVariation)(r,t,this.datafileReader);if(n)return n.value;var o=this.getBucketValue(r,t),a=(0,i.getBucketedVariation)(r,t,o,this.datafileReader);if(!a)return;return a.value}catch(e){return void console.error("[Featurevisor]",e)}},e.prototype.getVariationBoolean=function(e,t){return void 0===t&&(t={}),a(this.getVariation(e,t),"boolean")},e.prototype.getVariationString=function(e,t){return void 0===t&&(t={}),a(this.getVariation(e,t),"string")},e.prototype.getVariationInteger=function(e,t){return void 0===t&&(t={}),a(this.getVariation(e,t),"integer")},e.prototype.getVariationDouble=function(e,t){return void 0===t&&(t={}),a(this.getVariation(e,t),"double")},e.prototype.activate=function(e,t){void 0===t&&(t={});try{var r=this.getVariation(e,t);if(!r)return;if(this.onActivation){var n={};this.datafileReader.getAllAttributes().filter((function(e){return!0===e.capture})).forEach((function(e){void 0!==t[e.key]&&(n[e.key]=t[e.key])})),this.onActivation(e,r,t,n)}return r}catch(e){return void console.error("[Featurevisor]",e)}},e.prototype.activateBoolean=function(e,t){return void 0===t&&(t={}),a(this.activate(e,t),"boolean")},e.prototype.activateString=function(e,t){return void 0===t&&(t={}),a(this.activate(e,t),"string")},e.prototype.activateInteger=function(e,t){return void 0===t&&(t={}),a(this.activate(e,t),"integer")},e.prototype.activateDouble=function(e,t){return void 0===t&&(t={}),a(this.activate(e,t),"double")},e.prototype.getVariable=function(e,t,r){void 0===r&&(r={});try{var n=this.getFeature(e);if(!n)return;var o=(0,i.getForcedVariableValue)(n,t,r,this.datafileReader);if(void 0!==o)return o;var a=this.getBucketValue(n,r);return(0,i.getBucketedVariableValue)(n,t,r,a,this.datafileReader)}catch(e){return void console.error("[Featurevisor]",e)}},e.prototype.getVariableBoolean=function(e,t,r){return void 0===r&&(r={}),a(this.getVariable(e,t,r),"boolean")},e.prototype.getVariableString=function(e,t,r){return void 0===r&&(r={}),a(this.getVariable(e,t,r),"string")},e.prototype.getVariableInteger=function(e,t,r){return void 0===r&&(r={}),a(this.getVariable(e,t,r),"integer")},e.prototype.getVariableDouble=function(e,t,r){return void 0===r&&(r={}),a(this.getVariable(e,t,r),"double")},e.prototype.getVariableArray=function(e,t,r){return void 0===r&&(r={}),a(this.getVariable(e,t,r),"array")},e}();t.FeaturevisorSDK=u},243:(e,t)=>{"use strict";function r(e,t){var r=e.attribute,n=e.operator,i=e.value;if("equals"===n)return t[r]===i;if("notEquals"===n)return t[r]!==i;if("string"==typeof t[r]&&Array.isArray(i)){var o=t[r];if("in"===n)return-1!==i.indexOf(o);if("notIn"===n)return-1===i.indexOf(o)}else if("string"==typeof t[r]&&"string"==typeof i){if(o=t[r],"contains"===n)return-1!==o.indexOf(i);if("notContains"===n)return-1===o.indexOf(i);if("startsWith"===n)return o.startsWith(i);if("endsWith"===n)return o.endsWith(i)}else if("number"==typeof t[r]&&"number"==typeof i){if(o=t[r],"greaterThan"===n)return o>i;if("greaterThanOrEquals"===n)return o>=i;if("lessThan"===n)return o<i;if("lessThanOrEquals"===n)return o<=i}return!1}Object.defineProperty(t,"__esModule",{value:!0}),t.allConditionsAreMatched=t.conditionIsMatched=void 0,t.conditionIsMatched=r,t.allConditionsAreMatched=function e(t,n){return"attribute"in t?r(t,n):"and"in t&&Array.isArray(t.and)?t.and.every((function(t){return e(t,n)})):"or"in t&&Array.isArray(t.or)?t.or.some((function(t){return e(t,n)})):"not"in t&&Array.isArray(t.not)?t.not.every((function(r){return!1===e({and:t.not},n)})):!!Array.isArray(t)&&t.every((function(t){return e(t,n)}))}},913:(e,t)=>{"use strict";function r(e,t){if("string"==typeof e[t]&&"*"!==e[t])try{e[t]=JSON.parse(e[t])}catch(e){console.error("Error parsing JSON",e)}return e}Object.defineProperty(t,"__esModule",{value:!0}),t.DatafileReader=t.parseJsonConditionsIfStringified=void 0,t.parseJsonConditionsIfStringified=r;var n=function(){function e(e){this.schemaVersion=e.schemaVersion,this.revision=e.revision,this.segments=e.segments,this.attributes=e.attributes,this.features=e.features}return e.prototype.getRevision=function(){return this.revision},e.prototype.getSchemaVersion=function(){return this.schemaVersion},e.prototype.getAllAttributes=function(){return this.attributes},e.prototype.getAttribute=function(e){return this.attributes.find((function(t){return t.key===e}))},e.prototype.getSegment=function(e){var t=this.segments.find((function(t){return t.key===e}));if(t)return r(t,"conditions")},e.prototype.getFeature=function(e){var t=this.features.find((function(t){return t.key===e}));if(t)return t},e}();t.DatafileReader=n},522:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getBucketedVariableValue=t.getForcedVariableValue=t.getBucketedVariation=t.getForcedVariation=t.getMatchedAllocation=t.getMatchedTraffic=void 0;var n=r(590),i=r(243);function o(e,t,r,i){return e.find((function(e){return!(r>e.percentage||!(0,n.allGroupSegmentsAreMatched)("string"==typeof e.segments&&"*"!==e.segments?JSON.parse(e.segments):e.segments,t,i))}))}function a(e,t){for(var r=0,n=0,i=e.allocation;n<i.length;n++){var o=i[n];if(t<=(r+=o.percentage))return o}}function u(e,t,r){if(e.force)return e.force.find((function(e){return e.conditions?(0,i.allConditionsAreMatched)(e.conditions,t):!!e.segments&&(0,n.allGroupSegmentsAreMatched)(e.segments,t,r)}))}function s(e,t,r,n){var i=o(e.traffic,t,r,n);if(i){var u=a(i,r);if(u){var s=u.variation,c=e.variations.find((function(e){return e.value===s}));if(c)return c}}}t.getMatchedTraffic=o,t.getMatchedAllocation=a,t.getForcedVariation=function(e,t,r){var n=u(e,t,r);if(n&&n.variation)return e.variations.find((function(e){return e.value===n.variation}))},t.getBucketedVariation=s,t.getForcedVariableValue=function(e,t,r,n){var i=u(e,r,n);if(i&&i.variables)return i.variables[t]},t.getBucketedVariableValue=function(e,t,r,o,a){var u,c=e.variablesSchema;if(c&&!c.find((function(e){e.key}))){var f=s(e,r,o,a);if(f){var d=null===(u=f.variables)||void 0===u?void 0:u.find((function(e){return e.key===t}));if(d){if(d.overrides){var l=d.overrides.find((function(e){return e.conditions?(0,i.allConditionsAreMatched)("string"==typeof e.conditions?JSON.parse(e.conditions):e.conditions,r):!!e.segments&&(0,n.allGroupSegmentsAreMatched)("string"==typeof e.segments&&"*"!==e.segments?JSON.parse(e.segments):e.segments,r,a)}));if(l)return l.value}return d.value}}}}},97:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=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,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=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}),i(r(725),t),i(r(352),t)},590:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.allGroupSegmentsAreMatched=t.segmentIsMatched=void 0;var n=r(243);function i(e,t){return(0,n.allConditionsAreMatched)(e.conditions,t)}t.segmentIsMatched=i,t.allGroupSegmentsAreMatched=function e(t,r,n){if("*"===t)return!0;if("string"==typeof t){var o=n.getSegment(t);return!!o&&i(o,r)}if("object"==typeof t){if("and"in t&&Array.isArray(t.and))return t.and.every((function(t){return e(t,r,n)}));if("or"in t&&Array.isArray(t.or))return t.or.some((function(t){return e(t,r,n)}));if("not"in t&&Array.isArray(t.not))return t.not.every((function(t){return!1===e(t,r,n)}))}return!!Array.isArray(t)&&t.every((function(t){return e(t,r,n)}))}}},t={},function r(n){var i=t[n];if(void 0!==i)return i.exports;var o=t[n]={exports:{}};return e[n].call(o.exports,o,o.exports,r),o.exports}(97);var e,t}));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.FeaturevisorSDK=t():e.FeaturevisorSDK=t()}(this,(()=>{return e={77:e=>{!function(){const t=e=>(new TextEncoder).encode(e);function r(e,r){let n,i,o,a,u,s,c,f;for("string"==typeof e&&(e=t(e)),n=3&e.length,i=e.length-n,o=r,u=3432918353,s=461845907,f=0;f<i;)c=255&e[f]|(255&e[++f])<<8|(255&e[++f])<<16|(255&e[++f])<<24,++f,c=(65535&c)*u+(((c>>>16)*u&65535)<<16)&4294967295,c=c<<15|c>>>17,c=(65535&c)*s+(((c>>>16)*s&65535)<<16)&4294967295,o^=c,o=o<<13|o>>>19,a=5*(65535&o)+((5*(o>>>16)&65535)<<16)&4294967295,o=27492+(65535&a)+((58964+(a>>>16)&65535)<<16);switch(c=0,n){case 3:c^=(255&e[f+2])<<16;case 2:c^=(255&e[f+1])<<8;case 1:c^=255&e[f],c=(65535&c)*u+(((c>>>16)*u&65535)<<16)&4294967295,c=c<<15|c>>>17,c=(65535&c)*s+(((c>>>16)*s&65535)<<16)&4294967295,o^=c}return o^=e.length,o^=o>>>16,o=2246822507*(65535&o)+((2246822507*(o>>>16)&65535)<<16)&4294967295,o^=o>>>13,o=3266489909*(65535&o)+((3266489909*(o>>>16)&65535)<<16)&4294967295,o^=o>>>16,o>>>0}const n=r;n.v2=function(e,r){"string"==typeof e&&(e=t(e));let n,i=e.length,o=r^i,a=0;for(;i>=4;)n=255&e[a]|(255&e[++a])<<8|(255&e[++a])<<16|(255&e[++a])<<24,n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16),n^=n>>>24,n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16),o=1540483477*(65535&o)+((1540483477*(o>>>16)&65535)<<16)^n,i-=4,++a;switch(i){case 3:o^=(255&e[a+2])<<16;case 2:o^=(255&e[a+1])<<8;case 1:o^=255&e[a],o=1540483477*(65535&o)+((1540483477*(o>>>16)&65535)<<16)}return o^=o>>>13,o=1540483477*(65535&o)+((1540483477*(o>>>16)&65535)<<16),o^=o>>>15,o>>>0},n.v3=r,e.exports=n}()},725:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getBucketedNumber=t.MAX_BUCKETED_NUMBER=void 0;var n=r(77),i=Math.pow(2,32);t.MAX_BUCKETED_NUMBER=1e5,t.getBucketedNumber=function(e){var r=n.v3(e,1)/i;return Math.floor(r*t.MAX_BUCKETED_NUMBER)}},352:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FeaturevisorSDK=t.getValueByType=void 0;var n=r(913),i=r(522),o=r(725);function a(e,t){if(void 0!==e)switch(t){case"string":return"string"==typeof e?e:void 0;case"integer":return parseInt(e,10);case"double":return parseFloat(e);case"boolean":return!0===e;case"array":return Array.isArray(e)?e:void 0;case"object":return"object"==typeof e?e:void 0;default:return e}}t.getValueByType=a;var u=function(){function e(e){e.onActivation&&(this.onActivation=e.onActivation),e.configureBucketValue&&(this.configureBucketValue=e.configureBucketValue);try{this.datafileReader=new n.DatafileReader("string"==typeof e.datafile?JSON.parse(e.datafile):e.datafile)}catch(e){console.error("Featurevisor could not parse the datafile"),console.error(e)}}return e.prototype.getFeature=function(e){return"string"==typeof e?this.datafileReader.getFeature(e):e},e.prototype.getBucketKey=function(e,t){var r=e.key,n="string"==typeof e.bucketBy?e.bucketBy:e.bucketBy.join("_");return"".concat(n,"_").concat(r)},e.prototype.getBucketValue=function(e,t){var r=this.getBucketKey(e,t),n=(0,o.getBucketedNumber)(r);return this.configureBucketValue?this.configureBucketValue(e,t,n):n},e.prototype.getVariation=function(e,t){void 0===t&&(t={});try{var r=this.getFeature(e);if(!r)return;var n=(0,i.getForcedVariation)(r,t,this.datafileReader);if(n)return n.value;var o=this.getBucketValue(r,t),a=(0,i.getBucketedVariation)(r,t,o,this.datafileReader);if(!a)return;return a.value}catch(e){return void console.error("[Featurevisor]",e)}},e.prototype.getVariationBoolean=function(e,t){return void 0===t&&(t={}),a(this.getVariation(e,t),"boolean")},e.prototype.getVariationString=function(e,t){return void 0===t&&(t={}),a(this.getVariation(e,t),"string")},e.prototype.getVariationInteger=function(e,t){return void 0===t&&(t={}),a(this.getVariation(e,t),"integer")},e.prototype.getVariationDouble=function(e,t){return void 0===t&&(t={}),a(this.getVariation(e,t),"double")},e.prototype.activate=function(e,t){void 0===t&&(t={});try{var r=this.getVariation(e,t);if(!r)return;if(this.onActivation){var n={};this.datafileReader.getAllAttributes().filter((function(e){return!0===e.capture})).forEach((function(e){void 0!==t[e.key]&&(n[e.key]=t[e.key])})),this.onActivation(e,r,t,n)}return r}catch(e){return void console.error("[Featurevisor]",e)}},e.prototype.activateBoolean=function(e,t){return void 0===t&&(t={}),a(this.activate(e,t),"boolean")},e.prototype.activateString=function(e,t){return void 0===t&&(t={}),a(this.activate(e,t),"string")},e.prototype.activateInteger=function(e,t){return void 0===t&&(t={}),a(this.activate(e,t),"integer")},e.prototype.activateDouble=function(e,t){return void 0===t&&(t={}),a(this.activate(e,t),"double")},e.prototype.getVariable=function(e,t,r){void 0===r&&(r={});try{var n=this.getFeature(e);if(!n)return;var o=(0,i.getForcedVariableValue)(n,t,r,this.datafileReader);if(void 0!==o)return o;var a=this.getBucketValue(n,r);return(0,i.getBucketedVariableValue)(n,t,r,a,this.datafileReader)}catch(e){return void console.error("[Featurevisor]",e)}},e.prototype.getVariableBoolean=function(e,t,r){return void 0===r&&(r={}),a(this.getVariable(e,t,r),"boolean")},e.prototype.getVariableString=function(e,t,r){return void 0===r&&(r={}),a(this.getVariable(e,t,r),"string")},e.prototype.getVariableInteger=function(e,t,r){return void 0===r&&(r={}),a(this.getVariable(e,t,r),"integer")},e.prototype.getVariableDouble=function(e,t,r){return void 0===r&&(r={}),a(this.getVariable(e,t,r),"double")},e.prototype.getVariableArray=function(e,t,r){return void 0===r&&(r={}),a(this.getVariable(e,t,r),"array")},e.prototype.getVariableObject=function(e,t,r){return void 0===r&&(r={}),a(this.getVariable(e,t,r),"object")},e}();t.FeaturevisorSDK=u},243:(e,t)=>{"use strict";function r(e,t){var r=e.attribute,n=e.operator,i=e.value;if("equals"===n)return t[r]===i;if("notEquals"===n)return t[r]!==i;if("string"==typeof t[r]&&Array.isArray(i)){var o=t[r];if("in"===n)return-1!==i.indexOf(o);if("notIn"===n)return-1===i.indexOf(o)}else if("string"==typeof t[r]&&"string"==typeof i){if(o=t[r],"contains"===n)return-1!==o.indexOf(i);if("notContains"===n)return-1===o.indexOf(i);if("startsWith"===n)return o.startsWith(i);if("endsWith"===n)return o.endsWith(i)}else if("number"==typeof t[r]&&"number"==typeof i){if(o=t[r],"greaterThan"===n)return o>i;if("greaterThanOrEquals"===n)return o>=i;if("lessThan"===n)return o<i;if("lessThanOrEquals"===n)return o<=i}return!1}Object.defineProperty(t,"__esModule",{value:!0}),t.allConditionsAreMatched=t.conditionIsMatched=void 0,t.conditionIsMatched=r,t.allConditionsAreMatched=function e(t,n){return"attribute"in t?r(t,n):"and"in t&&Array.isArray(t.and)?t.and.every((function(t){return e(t,n)})):"or"in t&&Array.isArray(t.or)?t.or.some((function(t){return e(t,n)})):"not"in t&&Array.isArray(t.not)?t.not.every((function(r){return!1===e({and:t.not},n)})):!!Array.isArray(t)&&t.every((function(t){return e(t,n)}))}},913:(e,t)=>{"use strict";function r(e,t){if("string"==typeof e[t]&&"*"!==e[t])try{e[t]=JSON.parse(e[t])}catch(e){console.error("Error parsing JSON",e)}return e}Object.defineProperty(t,"__esModule",{value:!0}),t.DatafileReader=t.parseJsonConditionsIfStringified=void 0,t.parseJsonConditionsIfStringified=r;var n=function(){function e(e){this.schemaVersion=e.schemaVersion,this.revision=e.revision,this.segments=e.segments,this.attributes=e.attributes,this.features=e.features}return e.prototype.getRevision=function(){return this.revision},e.prototype.getSchemaVersion=function(){return this.schemaVersion},e.prototype.getAllAttributes=function(){return this.attributes},e.prototype.getAttribute=function(e){return this.attributes.find((function(t){return t.key===e}))},e.prototype.getSegment=function(e){var t=this.segments.find((function(t){return t.key===e}));if(t)return r(t,"conditions")},e.prototype.getFeature=function(e){var t=this.features.find((function(t){return t.key===e}));if(t)return t},e}();t.DatafileReader=n},522:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getBucketedVariableValue=t.getForcedVariableValue=t.getBucketedVariation=t.getForcedVariation=t.getMatchedAllocation=t.getMatchedTraffic=void 0;var n=r(590),i=r(243);function o(e,t,r,i){return e.find((function(e){return!(r>e.percentage||!(0,n.allGroupSegmentsAreMatched)("string"==typeof e.segments&&"*"!==e.segments?JSON.parse(e.segments):e.segments,t,i))}))}function a(e,t){for(var r=0,n=0,i=e.allocation;n<i.length;n++){var o=i[n];if(t<=(r+=o.percentage))return o}}function u(e,t,r){if(e.force)return e.force.find((function(e){return e.conditions?(0,i.allConditionsAreMatched)(e.conditions,t):!!e.segments&&(0,n.allGroupSegmentsAreMatched)(e.segments,t,r)}))}function s(e,t,r,n){var i=o(e.traffic,t,r,n);if(i){var u=a(i,r);if(u){var s=u.variation,c=e.variations.find((function(e){return e.value===s}));if(c)return c}}}t.getMatchedTraffic=o,t.getMatchedAllocation=a,t.getForcedVariation=function(e,t,r){var n=u(e,t,r);if(n&&n.variation)return e.variations.find((function(e){return e.value===n.variation}))},t.getBucketedVariation=s,t.getForcedVariableValue=function(e,t,r,n){var i=u(e,r,n);if(i&&i.variables)return i.variables[t]},t.getBucketedVariableValue=function(e,t,r,o,a){var u,c=e.variablesSchema;if(c){var f=c.find((function(e){return e.key===t}));if(f){var d=s(e,r,o,a);if(d){var l=null===(u=d.variables)||void 0===u?void 0:u.find((function(e){return e.key===t}));if(!l)return f.defaultValue;if(l.overrides){var v=l.overrides.find((function(e){return e.conditions?(0,i.allConditionsAreMatched)("string"==typeof e.conditions?JSON.parse(e.conditions):e.conditions,r):!!e.segments&&(0,n.allGroupSegmentsAreMatched)("string"==typeof e.segments&&"*"!==e.segments?JSON.parse(e.segments):e.segments,r,a)}));if(v)return v.value}return l.value}}}}},97:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=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,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=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}),i(r(725),t),i(r(352),t)},590:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.allGroupSegmentsAreMatched=t.segmentIsMatched=void 0;var n=r(243);function i(e,t){return(0,n.allConditionsAreMatched)(e.conditions,t)}t.segmentIsMatched=i,t.allGroupSegmentsAreMatched=function e(t,r,n){if("*"===t)return!0;if("string"==typeof t){var o=n.getSegment(t);return!!o&&i(o,r)}if("object"==typeof t){if("and"in t&&Array.isArray(t.and))return t.and.every((function(t){return e(t,r,n)}));if("or"in t&&Array.isArray(t.or))return t.or.some((function(t){return e(t,r,n)}));if("not"in t&&Array.isArray(t.not))return t.not.every((function(t){return!1===e(t,r,n)}))}return!!Array.isArray(t)&&t.every((function(t){return e(t,r,n)}))}}},t={},function r(n){var i=t[n];if(void 0!==i)return i.exports;var o=t[n]={exports:{}};return e[n].call(o.exports,o,o.exports,r),o.exports}(97);var e,t}));
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","mappings":"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","sources":["webpack://FeaturevisorSDK/webpack/universalModuleDefinition","webpack://FeaturevisorSDK/../../node_modules/murmurhash/murmurhash.js","webpack://FeaturevisorSDK/./src/bucket.ts","webpack://FeaturevisorSDK/./src/client.ts","webpack://FeaturevisorSDK/./src/conditions.ts","webpack://FeaturevisorSDK/./src/datafileReader.ts","webpack://FeaturevisorSDK/./src/feature.ts","webpack://FeaturevisorSDK/./src/index.ts","webpack://FeaturevisorSDK/./src/segments.ts","webpack://FeaturevisorSDK/webpack/bootstrap","webpack://FeaturevisorSDK/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FeaturevisorSDK\"] = factory();\n\telse\n\t\troot[\"FeaturevisorSDK\"] = factory();\n})(this, () => {\nreturn ","(function(){\n const _global = this;\n\n const createBuffer = (val) => new TextEncoder().encode(val)\n\n /**\n * JS Implementation of MurmurHash2\n *\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/murmurhash-js\n * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {Uint8Array | string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV2(str, seed) {\n if (typeof str === 'string') str = createBuffer(str);\n let\n l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n\n while (l >= 4) {\n k =\n ((str[i] & 0xff)) |\n ((str[++i] & 0xff) << 8) |\n ((str[++i] & 0xff) << 16) |\n ((str[++i] & 0xff) << 24);\n\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n k ^= k >>> 24;\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n l -= 4;\n ++i;\n }\n\n switch (l) {\n case 3: h ^= (str[i + 2] & 0xff) << 16;\n case 2: h ^= (str[i + 1] & 0xff) << 8;\n case 1: h ^= (str[i] & 0xff);\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n }\n\n h ^= h >>> 13;\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n h ^= h >>> 15;\n\n return h >>> 0;\n };\n\n /*\n * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)\n *\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/murmurhash-js\n * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {Uint8Array | string} key ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV3(key, seed) {\n if (typeof key === 'string') key = createBuffer(key);\n\n let remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;\n\n remainder = key.length & 3; // key.length % 4\n bytes = key.length - remainder;\n h1 = seed;\n c1 = 0xcc9e2d51;\n c2 = 0x1b873593;\n i = 0;\n\n while (i < bytes) {\n k1 =\n ((key[i] & 0xff)) |\n ((key[++i] & 0xff) << 8) |\n ((key[++i] & 0xff) << 16) |\n ((key[++i] & 0xff) << 24);\n ++i;\n\n k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\n\n h1 ^= k1;\n h1 = (h1 << 13) | (h1 >>> 19);\n h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\n h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\n }\n\n k1 = 0;\n\n switch (remainder) {\n case 3: k1 ^= (key[i + 2] & 0xff) << 16;\n case 2: k1 ^= (key[i + 1] & 0xff) << 8;\n case 1: k1 ^= (key[i] & 0xff);\n\n k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= k1;\n }\n\n h1 ^= key.length;\n\n h1 ^= h1 >>> 16;\n h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= h1 >>> 13;\n h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\n h1 ^= h1 >>> 16;\n\n return h1 >>> 0;\n }\n\n const murmur = MurmurHashV3;\n murmur.v2 = MurmurHashV2;\n murmur.v3 = MurmurHashV3;\n\n if (typeof(module) != 'undefined') {\n module.exports = murmur;\n } else {\n const _previousRoot = _global.murmur;\n murmur.noConflict = function() {\n _global.murmur = _previousRoot;\n return murmur;\n }\n _global.murmur = murmur;\n }\n}());\n","import * as murmurhash from \"murmurhash\";\n\nconst HASH_SEED = 1;\nconst MAX_HASH_VALUE = Math.pow(2, 32);\n\nexport const MAX_BUCKETED_NUMBER = 100000; // 100% * 1000 to include three decimal places in the same integer value\n\nexport function getBucketedNumber(bucketKey: string): number {\n const hashValue = murmurhash.v3(bucketKey, HASH_SEED);\n const ratio = hashValue / MAX_HASH_VALUE;\n\n return Math.floor(ratio * MAX_BUCKETED_NUMBER);\n}\n","import {\n Attributes,\n VariationValue,\n VariableValue,\n Feature,\n DatafileContent,\n BucketKey,\n BucketValue,\n FeatureKey,\n} from \"@featurevisor/types\";\nimport { DatafileReader } from \"./datafileReader\";\nimport {\n getBucketedVariation,\n getBucketedVariableValue,\n getForcedVariation,\n getForcedVariableValue,\n} from \"./feature\";\nimport { getBucketedNumber } from \"./bucket\";\n\nexport type ActivationCallback = (\n featureName: string,\n variation: VariationValue,\n attributes: Attributes,\n captureAttributes: Attributes,\n) => void;\n\nexport type ConfigureBucketValue = (feature, attributes, bucketValue: BucketValue) => BucketValue;\nexport interface SdkOptions {\n datafile: DatafileContent | string;\n onActivation?: ActivationCallback;\n configureBucketValue?: ConfigureBucketValue;\n}\n\n// union of VariableValue and VariationValue\ntype FieldType = \"string\" | \"integer\" | \"double\" | \"boolean\" | \"array\";\ntype ValueType = string | number | boolean | string[] | null | undefined;\n\nexport function getValueByType(value: ValueType, fieldType: FieldType): ValueType {\n if (value === undefined) {\n return undefined;\n }\n\n switch (fieldType) {\n case \"string\":\n return typeof value === \"string\" ? value : undefined;\n case \"integer\":\n return parseInt(value as string, 10);\n case \"double\":\n return parseFloat(value as string);\n case \"boolean\":\n return value === true;\n case \"array\":\n return Array.isArray(value) ? value : undefined;\n default:\n return value;\n }\n}\n\nexport class FeaturevisorSDK {\n private onActivation?: ActivationCallback;\n private datafileReader: DatafileReader;\n private configureBucketValue?: ConfigureBucketValue;\n\n constructor(options: SdkOptions) {\n if (options.onActivation) {\n this.onActivation = options.onActivation;\n }\n\n if (options.configureBucketValue) {\n this.configureBucketValue = options.configureBucketValue;\n }\n\n try {\n this.datafileReader = new DatafileReader(\n typeof options.datafile === \"string\" ? JSON.parse(options.datafile) : options.datafile,\n );\n } catch (e) {\n console.error(`Featurevisor could not parse the datafile`);\n console.error(e);\n }\n }\n\n private getFeature(featureKey: string | Feature): Feature | undefined {\n return typeof featureKey === \"string\"\n ? this.datafileReader.getFeature(featureKey) // only key provided\n : featureKey; // full feature provided\n }\n\n /**\n * Bucketing\n */\n\n private getBucketKey(feature: Feature, attributes: Attributes): BucketKey {\n const featureKey = feature.key;\n\n const prefix =\n typeof feature.bucketBy === \"string\" ? feature.bucketBy : feature.bucketBy.join(\"_\");\n\n return `${prefix}_${featureKey}`;\n }\n\n private getBucketValue(feature: Feature, attributes: Attributes): BucketValue {\n const bucketKey = this.getBucketKey(feature, attributes);\n\n const value = getBucketedNumber(bucketKey);\n\n if (this.configureBucketValue) {\n return this.configureBucketValue(feature, attributes, value);\n }\n\n return value;\n }\n\n /**\n * Variation\n */\n\n getVariation(\n featureKey: FeatureKey | Feature,\n attributes: Attributes = {},\n ): VariationValue | undefined {\n try {\n const feature = this.getFeature(featureKey);\n\n if (!feature) {\n return undefined;\n }\n\n const forcedVariation = getForcedVariation(feature, attributes, this.datafileReader);\n\n if (forcedVariation) {\n return forcedVariation.value;\n }\n\n const bucketValue = this.getBucketValue(feature, attributes);\n\n const variation = getBucketedVariation(feature, attributes, bucketValue, this.datafileReader);\n\n if (!variation) {\n return undefined;\n }\n\n return variation.value;\n } catch (e) {\n console.error(\"[Featurevisor]\", e);\n\n return undefined;\n }\n }\n\n getVariationBoolean(\n featureKey: FeatureKey | Feature,\n attributes: Attributes = {},\n ): boolean | undefined {\n const variationValue = this.getVariation(featureKey, attributes);\n\n return getValueByType(variationValue, \"boolean\") as boolean | undefined;\n }\n\n getVariationString(\n featureKey: FeatureKey | Feature,\n attributes: Attributes = {},\n ): string | undefined {\n const variationValue = this.getVariation(featureKey, attributes);\n\n return getValueByType(variationValue, \"string\") as string | undefined;\n }\n\n getVariationInteger(\n featureKey: FeatureKey | Feature,\n attributes: Attributes = {},\n ): number | undefined {\n const variationValue = this.getVariation(featureKey, attributes);\n\n return getValueByType(variationValue, \"integer\") as number | undefined;\n }\n\n getVariationDouble(\n featureKey: FeatureKey | Feature,\n attributes: Attributes = {},\n ): number | undefined {\n const variationValue = this.getVariation(featureKey, attributes);\n\n return getValueByType(variationValue, \"double\") as number | undefined;\n }\n\n /**\n * Activate\n */\n activate(featureKey: FeatureKey, attributes: Attributes = {}): VariationValue | undefined {\n try {\n const variationValue = this.getVariation(featureKey, attributes);\n\n if (!variationValue) {\n return undefined;\n }\n\n if (this.onActivation) {\n const captureAttributes: Attributes = {};\n\n const attributesForCapturing = this.datafileReader\n .getAllAttributes()\n .filter((a) => a.capture === true);\n\n attributesForCapturing.forEach((a) => {\n if (typeof attributes[a.key] !== \"undefined\") {\n captureAttributes[a.key] = attributes[a.key];\n }\n });\n\n this.onActivation(featureKey, variationValue, attributes, captureAttributes);\n }\n\n return variationValue;\n } catch (e) {\n console.error(\"[Featurevisor]\", e);\n\n return undefined;\n }\n }\n\n activateBoolean(featureKey: FeatureKey, attributes: Attributes = {}): boolean | undefined {\n const variationValue = this.activate(featureKey, attributes);\n\n return getValueByType(variationValue, \"boolean\") as boolean | undefined;\n }\n\n activateString(featureKey: FeatureKey, attributes: Attributes = {}): string | undefined {\n const variationValue = this.activate(featureKey, attributes);\n\n return getValueByType(variationValue, \"string\") as string | undefined;\n }\n\n activateInteger(featureKey: FeatureKey, attributes: Attributes = {}): number | undefined {\n const variationValue = this.activate(featureKey, attributes);\n\n return getValueByType(variationValue, \"integer\") as number | undefined;\n }\n\n activateDouble(featureKey: FeatureKey, attributes: Attributes = {}): number | undefined {\n const variationValue = this.activate(featureKey, attributes);\n\n return getValueByType(variationValue, \"double\") as number | undefined;\n }\n\n /**\n * Variable\n */\n\n getVariable(\n featureKey: FeatureKey | Feature,\n variableKey: string,\n attributes: Attributes = {},\n ): VariableValue | undefined {\n try {\n const feature = this.getFeature(featureKey);\n\n if (!feature) {\n return undefined;\n }\n\n const forcedVariableValue = getForcedVariableValue(\n feature,\n variableKey,\n attributes,\n this.datafileReader,\n );\n\n if (typeof forcedVariableValue !== \"undefined\") {\n return forcedVariableValue;\n }\n\n const bucketValue = this.getBucketValue(feature, attributes);\n\n return getBucketedVariableValue(\n feature,\n variableKey,\n attributes,\n bucketValue,\n this.datafileReader,\n );\n } catch (e) {\n console.error(\"[Featurevisor]\", e);\n\n return undefined;\n }\n }\n\n getVariableBoolean(\n featureKey: FeatureKey | Feature,\n variableKey: string,\n attributes: Attributes = {},\n ): boolean | undefined {\n const variableValue = this.getVariable(featureKey, variableKey, attributes);\n\n return getValueByType(variableValue, \"boolean\") as boolean | undefined;\n }\n\n getVariableString(\n featureKey: FeatureKey | Feature,\n variableKey: string,\n attributes: Attributes = {},\n ): string | undefined {\n const variableValue = this.getVariable(featureKey, variableKey, attributes);\n\n return getValueByType(variableValue, \"string\") as string | undefined;\n }\n\n getVariableInteger(\n featureKey: FeatureKey | Feature,\n variableKey: string,\n attributes: Attributes = {},\n ): number | undefined {\n const variableValue = this.getVariable(featureKey, variableKey, attributes);\n\n return getValueByType(variableValue, \"integer\") as number | undefined;\n }\n\n getVariableDouble(\n featureKey: FeatureKey | Feature,\n variableKey: string,\n attributes: Attributes = {},\n ): number | undefined {\n const variableValue = this.getVariable(featureKey, variableKey, attributes);\n\n return getValueByType(variableValue, \"double\") as number | undefined;\n }\n\n getVariableArray(\n featureKey: FeatureKey | Feature,\n variableKey: string,\n attributes: Attributes = {},\n ): string[] | undefined {\n const variableValue = this.getVariable(featureKey, variableKey, attributes);\n\n return getValueByType(variableValue, \"array\") as string[] | undefined;\n }\n}\n","import { Attributes, Condition, PlainCondition } from \"@featurevisor/types\";\n\nexport function conditionIsMatched(condition: PlainCondition, attributes: Attributes): boolean {\n const { attribute, operator, value } = condition;\n\n if (operator === \"equals\") {\n return attributes[attribute] === value;\n } else if (operator === \"notEquals\") {\n return attributes[attribute] !== value;\n } else if (typeof attributes[attribute] === \"string\" && Array.isArray(value)) {\n // array\n const valueInAttributes = attributes[attribute] as string;\n\n if (operator === \"in\") {\n return value.indexOf(valueInAttributes) !== -1;\n } else if (operator === \"notIn\") {\n return value.indexOf(valueInAttributes) === -1;\n }\n } else if (typeof attributes[attribute] === \"string\" && typeof value === \"string\") {\n // string\n const valueInAttributes = attributes[attribute] as string;\n\n if (operator === \"contains\") {\n return valueInAttributes.indexOf(value) !== -1;\n } else if (operator === \"notContains\") {\n return valueInAttributes.indexOf(value) === -1;\n } else if (operator === \"startsWith\") {\n return valueInAttributes.startsWith(value);\n } else if (operator === \"endsWith\") {\n return valueInAttributes.endsWith(value);\n }\n } else if (typeof attributes[attribute] === \"number\" && typeof value === \"number\") {\n // numeric\n const valueInAttributes = attributes[attribute] as number;\n\n if (operator === \"greaterThan\") {\n return valueInAttributes > value;\n } else if (operator === \"greaterThanOrEquals\") {\n return valueInAttributes >= value;\n } else if (operator === \"lessThan\") {\n return valueInAttributes < value;\n } else if (operator === \"lessThanOrEquals\") {\n return valueInAttributes <= value;\n }\n }\n\n return false;\n}\n\nexport function allConditionsAreMatched(\n conditions: Condition[] | Condition,\n attributes: Attributes,\n): boolean {\n if (\"attribute\" in conditions) {\n return conditionIsMatched(conditions, attributes);\n }\n\n if (\"and\" in conditions && Array.isArray(conditions.and)) {\n return conditions.and.every((c) => allConditionsAreMatched(c, attributes));\n }\n\n if (\"or\" in conditions && Array.isArray(conditions.or)) {\n return conditions.or.some((c) => allConditionsAreMatched(c, attributes));\n }\n\n if (\"not\" in conditions && Array.isArray(conditions.not)) {\n return conditions.not.every(\n (c) =>\n allConditionsAreMatched(\n {\n and: conditions.not,\n },\n attributes,\n ) === false,\n );\n }\n\n if (Array.isArray(conditions)) {\n return conditions.every((c) => allConditionsAreMatched(c, attributes));\n }\n\n return false;\n}\n","import {\n Feature,\n Segment,\n DatafileContent,\n Attribute,\n AttributeKey,\n SegmentKey,\n FeatureKey,\n} from \"@featurevisor/types\";\n\nexport function parseJsonConditionsIfStringified<T>(record: T, key: string): T {\n if (typeof record[key] === \"string\" && record[key] !== \"*\") {\n try {\n record[key] = JSON.parse(record[key]);\n } catch (e) {\n console.error(\"Error parsing JSON\", e);\n }\n }\n\n return record;\n}\n\nexport class DatafileReader {\n private schemaVersion: string;\n private revision: string;\n private attributes: Attribute[];\n private segments: Segment[];\n private features: Feature[];\n\n constructor(datafileJson: DatafileContent) {\n this.schemaVersion = datafileJson.schemaVersion;\n this.revision = datafileJson.revision;\n this.segments = datafileJson.segments;\n this.attributes = datafileJson.attributes;\n this.features = datafileJson.features;\n }\n\n getRevision(): string {\n return this.revision;\n }\n\n getSchemaVersion(): string {\n return this.schemaVersion;\n }\n\n getAllAttributes(): Attribute[] {\n return this.attributes;\n }\n\n getAttribute(attributeKey: AttributeKey): Attribute | undefined {\n return this.attributes.find((a) => a.key === attributeKey);\n }\n\n getSegment(segmentKey: SegmentKey): Segment | undefined {\n const segment = this.segments.find((s) => s.key === segmentKey);\n\n if (!segment) {\n return undefined;\n }\n\n return parseJsonConditionsIfStringified(segment, \"conditions\");\n }\n\n getFeature(featureKey: FeatureKey): Feature | undefined {\n const feature = this.features.find((s) => s.key === featureKey);\n\n if (!feature) {\n return undefined;\n }\n\n return feature;\n }\n}\n","import {\n Allocation,\n Attributes,\n Traffic,\n Feature,\n Variation,\n VariableKey,\n VariableValue,\n Force,\n} from \"@featurevisor/types\";\nimport { DatafileReader } from \"./datafileReader\";\nimport { allGroupSegmentsAreMatched } from \"./segments\";\nimport { allConditionsAreMatched } from \"./conditions\";\n\nexport function getMatchedTraffic(\n traffic: Traffic[],\n attributes: Attributes,\n bucketValue: number,\n datafileReader: DatafileReader,\n): Traffic | undefined {\n return traffic.find((traffic) => {\n if (bucketValue > traffic.percentage) {\n // out of bucket range\n return false;\n }\n\n if (\n !allGroupSegmentsAreMatched(\n typeof traffic.segments === \"string\" && traffic.segments !== \"*\"\n ? JSON.parse(traffic.segments)\n : traffic.segments,\n attributes,\n datafileReader,\n )\n ) {\n return false;\n }\n\n return true;\n });\n}\n\n// @TODO: make this function better with tests\nexport function getMatchedAllocation(\n matchedTraffic: Traffic,\n bucketValue: number,\n): Allocation | undefined {\n let total = 0;\n\n for (const allocation of matchedTraffic.allocation) {\n total += allocation.percentage;\n\n if (bucketValue <= total) {\n return allocation;\n }\n }\n\n return undefined;\n}\n\nfunction findForceFromFeature(\n feature: Feature,\n attributes: Attributes,\n datafileReader: DatafileReader,\n): Force | undefined {\n if (!feature.force) {\n return undefined;\n }\n\n return feature.force.find((f: Force) => {\n if (f.conditions) {\n return allConditionsAreMatched(f.conditions, attributes);\n }\n\n if (f.segments) {\n return allGroupSegmentsAreMatched(f.segments, attributes, datafileReader);\n }\n\n return false;\n });\n}\n\nexport function getForcedVariation(\n feature: Feature,\n attributes: Attributes,\n datafileReader: DatafileReader,\n): Variation | undefined {\n const force = findForceFromFeature(feature, attributes, datafileReader);\n\n if (!force || !force.variation) {\n return undefined;\n }\n\n return feature.variations.find((v) => v.value === force.variation);\n}\n\nexport function getBucketedVariation(\n feature: Feature,\n attributes: Attributes,\n bucketValue: number,\n datafileReader: DatafileReader,\n): Variation | undefined {\n const matchedTraffic = getMatchedTraffic(\n feature.traffic,\n attributes,\n bucketValue,\n datafileReader,\n );\n\n if (!matchedTraffic) {\n return undefined;\n }\n\n const allocation = getMatchedAllocation(matchedTraffic, bucketValue);\n\n if (!allocation) {\n return undefined;\n }\n\n const variationValue = allocation.variation;\n\n const variation = feature.variations.find((v) => {\n return v.value === variationValue;\n });\n\n if (!variation) {\n return undefined;\n }\n\n return variation;\n}\n\nexport function getForcedVariableValue(\n feature: Feature,\n variableKey: VariableKey,\n attributes: Attributes,\n datafileReader: DatafileReader,\n): VariableValue | undefined {\n const force = findForceFromFeature(feature, attributes, datafileReader);\n\n if (!force || !force.variables) {\n return undefined;\n }\n\n return force.variables[variableKey];\n}\n\nexport function getBucketedVariableValue(\n feature: Feature,\n variableKey: VariableKey,\n attributes: Attributes,\n bucketValue: number,\n datafileReader: DatafileReader,\n): VariableValue | undefined {\n // all variables\n const variablesSchema = feature.variablesSchema;\n\n if (!variablesSchema) {\n return undefined;\n }\n\n // single variable\n const variableSchema = variablesSchema.find((v) => {\n v.key === variableKey;\n });\n\n if (variableSchema) {\n return undefined;\n }\n\n const variation = getBucketedVariation(feature, attributes, bucketValue, datafileReader);\n\n if (!variation) {\n return undefined;\n }\n\n const variableFromVariation = variation.variables?.find((v) => {\n return v.key === variableKey;\n });\n\n if (!variableFromVariation) {\n return undefined;\n }\n\n if (variableFromVariation.overrides) {\n const override = variableFromVariation.overrides.find((o) => {\n if (o.conditions) {\n return allConditionsAreMatched(\n typeof o.conditions === \"string\" ? JSON.parse(o.conditions) : o.conditions,\n attributes,\n );\n }\n\n if (o.segments) {\n return allGroupSegmentsAreMatched(\n typeof o.segments === \"string\" && o.segments !== \"*\"\n ? JSON.parse(o.segments)\n : o.segments,\n attributes,\n datafileReader,\n );\n }\n\n return false;\n });\n\n if (override) {\n return override.value;\n }\n }\n\n return variableFromVariation.value;\n}\n","export * from \"./bucket\";\nexport * from \"./client\";\n","import { Attributes, GroupSegment, Segment, Condition } from \"@featurevisor/types\";\nimport { allConditionsAreMatched } from \"./conditions\";\nimport { DatafileReader } from \"./datafileReader\";\n\nexport function segmentIsMatched(segment: Segment, attributes: Attributes): boolean {\n return allConditionsAreMatched(segment.conditions as Condition | Condition[], attributes);\n}\n\nexport function allGroupSegmentsAreMatched(\n groupSegments: GroupSegment | GroupSegment[] | \"*\",\n attributes: Attributes,\n datafileReader: DatafileReader,\n): boolean {\n if (groupSegments === \"*\") {\n return true;\n }\n\n if (typeof groupSegments === \"string\") {\n const segment = datafileReader.getSegment(groupSegments);\n\n if (segment) {\n return segmentIsMatched(segment, attributes);\n }\n\n return false;\n }\n\n if (typeof groupSegments === \"object\") {\n if (\"and\" in groupSegments && Array.isArray(groupSegments.and)) {\n return groupSegments.and.every((groupSegment) =>\n allGroupSegmentsAreMatched(groupSegment, attributes, datafileReader),\n );\n }\n\n if (\"or\" in groupSegments && Array.isArray(groupSegments.or)) {\n return groupSegments.or.some((groupSegment) =>\n allGroupSegmentsAreMatched(groupSegment, attributes, datafileReader),\n );\n }\n\n if (\"not\" in groupSegments && Array.isArray(groupSegments.not)) {\n return groupSegments.not.every(\n (groupSegment) =>\n allGroupSegmentsAreMatched(groupSegment, attributes, datafileReader) === false,\n );\n }\n }\n\n if (Array.isArray(groupSegments)) {\n return groupSegments.every((groupSegment) =>\n allGroupSegmentsAreMatched(groupSegment, attributes, datafileReader),\n );\n }\n\n return false;\n}\n","// 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","define","amd","this","createBuffer","val","TextEncoder","encode","MurmurHashV3","key","seed","remainder","bytes","h1","h1b","c1","c2","k1","i","length","murmur","v2","str","k","l","h","v3","MAX_HASH_VALUE","Math","pow","MAX_BUCKETED_NUMBER","bucketKey","ratio","murmurhash","floor","getValueByType","value","fieldType","undefined","parseInt","parseFloat","Array","isArray","options","onActivation","configureBucketValue","datafileReader","DatafileReader","datafile","JSON","parse","e","console","error","getFeature","featureKey","getBucketKey","feature","attributes","prefix","bucketBy","join","getBucketValue","getBucketedNumber","getVariation","forcedVariation","getForcedVariation","bucketValue","variation","getBucketedVariation","getVariationBoolean","getVariationString","getVariationInteger","getVariationDouble","activate","variationValue","getAllAttributes","filter","a","capture","forEach","activateBoolean","activateString","activateInteger","activateDouble","getVariable","variableKey","forcedVariableValue","getForcedVariableValue","getBucketedVariableValue","getVariableBoolean","getVariableString","getVariableInteger","getVariableDouble","getVariableArray","FeaturevisorSDK","conditionIsMatched","condition","attribute","operator","valueInAttributes","indexOf","startsWith","endsWith","allConditionsAreMatched","conditions","and","every","c","or","some","not","parseJsonConditionsIfStringified","record","datafileJson","schemaVersion","revision","segments","features","getRevision","getSchemaVersion","getAttribute","attributeKey","find","getSegment","segmentKey","segment","s","getMatchedTraffic","traffic","percentage","allGroupSegmentsAreMatched","getMatchedAllocation","matchedTraffic","total","allocation","findForceFromFeature","force","f","variations","v","variables","variablesSchema","variableFromVariation","overrides","override","o","segmentIsMatched","groupSegments","groupSegment","__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,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAyB,gBAAID,IAE7BD,EAAsB,gBAAIC,GAC3B,CATD,CASGK,MAAM,KACT,O,WCVC,WACC,MAEMC,EAAgBC,IAAQ,IAAIC,aAAcC,OAAOF,GAiEvD,SAASG,EAAaC,EAAKC,GAGzB,IAAIC,EAAWC,EAAOC,EAAIC,EAAKC,EAASC,EAASC,EAAIC,EASrD,IAXmB,iBAART,IAAkBA,EAAML,EAAaK,IAIhDE,EAAyB,EAAbF,EAAIU,OAChBP,EAAQH,EAAIU,OAASR,EACrBE,EAAKH,EACLK,EAAK,WACLC,EAAK,UACLE,EAAI,EAEGA,EAAIN,GACPK,EACa,IAATR,EAAIS,IACO,IAAXT,IAAMS,KAAc,GACT,IAAXT,IAAMS,KAAc,IACT,IAAXT,IAAMS,KAAc,KACxBA,EAEFD,GAAc,MAALA,GAAeF,KAAUE,IAAO,IAAMF,EAAM,QAAW,IAAQ,WACxEE,EAAMA,GAAM,GAAOA,IAAO,GAC1BA,GAAc,MAALA,GAAeD,KAAUC,IAAO,IAAMD,EAAM,QAAW,IAAQ,WAExEH,GAAMI,EACFJ,EAAMA,GAAM,GAAOA,IAAO,GAC9BC,EAAyB,GAAV,MAALD,KAAqC,GAAbA,IAAO,IAAW,QAAW,IAAQ,WACvEA,EAAwB,OAAV,MAANC,KAA4C,OAAdA,IAAQ,IAAgB,QAAW,IAK3E,OAFAG,EAAK,EAEGN,GACN,KAAK,EAAGM,IAAoB,IAAbR,EAAIS,EAAI,KAAc,GACrC,KAAK,EAAGD,IAAoB,IAAbR,EAAIS,EAAI,KAAc,EACrC,KAAK,EAAGD,GAAgB,IAATR,EAAIS,GAEnBD,GAAa,MAALA,GAAeF,KAAUE,IAAO,IAAMF,EAAM,QAAW,IAAO,WACtEE,EAAMA,GAAM,GAAOA,IAAO,GAC1BA,GAAa,MAALA,GAAeD,KAAUC,IAAO,IAAMD,EAAM,QAAW,IAAO,WACtEH,GAAMI,EAWR,OARAJ,GAAMJ,EAAIU,OAEVN,GAAMA,IAAO,GACbA,EAAuB,YAAV,MAALA,KAA8C,YAAbA,IAAO,IAAoB,QAAW,IAAO,WACtFA,GAAMA,IAAO,GACbA,EAAwB,YAAV,MAALA,KAA8C,YAAbA,IAAO,IAAoB,QAAW,IAAQ,WACxFA,GAAMA,IAAO,GAENA,IAAO,CAChB,CAEA,MAAMO,EAASZ,EACfY,EAAOC,GA1GP,SAAsBC,EAAKZ,GACN,iBAARY,IAAkBA,EAAMlB,EAAakB,IAChD,IAIEC,EAHAC,EAAIF,EAAIH,OACRM,EAAIf,EAAOc,EACXN,EAAI,EAGN,KAAOM,GAAK,GACVD,EACa,IAATD,EAAIJ,IACO,IAAXI,IAAMJ,KAAc,GACT,IAAXI,IAAMJ,KAAc,IACT,IAAXI,IAAMJ,KAAc,GAExBK,EAAqB,YAAV,MAAJA,KAA4C,YAAZA,IAAM,IAAoB,QAAW,IAC5EA,GAAKA,IAAM,GACXA,EAAqB,YAAV,MAAJA,KAA4C,YAAZA,IAAM,IAAoB,QAAW,IAE9EE,EAAqB,YAAV,MAAJA,KAA4C,YAAZA,IAAM,IAAoB,QAAW,IAAOF,EAEjFC,GAAK,IACHN,EAGJ,OAAQM,GACR,KAAK,EAAGC,IAAmB,IAAbH,EAAIJ,EAAI,KAAc,GACpC,KAAK,EAAGO,IAAmB,IAAbH,EAAIJ,EAAI,KAAc,EACpC,KAAK,EAAGO,GAAe,IAATH,EAAIJ,GACVO,EAAqB,YAAV,MAAJA,KAA4C,YAAZA,IAAM,IAAoB,QAAW,IAOpF,OAJAA,GAAKA,IAAM,GACXA,EAAqB,YAAV,MAAJA,KAA4C,YAAZA,IAAM,IAAoB,QAAW,IAC5EA,GAAKA,IAAM,GAEJA,IAAM,CACf,EAsEAL,EAAOM,GAAKlB,EAGVR,EAAOD,QAAUqB,CASrB,CAxIA,E,+HCAA,YAGMO,EAAiBC,KAAKC,IAAI,EAAG,IAEtB,EAAAC,oBAAsB,IAEnC,6BAAkCC,GAChC,IACMC,EADYC,EAAWP,GAAGK,EANhB,GAOUJ,EAE1B,OAAOC,KAAKM,MAAMF,EAAQ,EAAAF,oBAC5B,C,wHCDA,aACA,SAMA,SAoBA,SAAgBK,EAAeC,EAAkBC,GAC/C,QAAcC,IAAVF,EAIJ,OAAQC,GACN,IAAK,SACH,MAAwB,iBAAVD,EAAqBA,OAAQE,EAC7C,IAAK,UACH,OAAOC,SAASH,EAAiB,IACnC,IAAK,SACH,OAAOI,WAAWJ,GACpB,IAAK,UACH,OAAiB,IAAVA,EACT,IAAK,QACH,OAAOK,MAAMC,QAAQN,GAASA,OAAQE,EACxC,IAAK,SACH,MAAwB,iBAAVF,EAAqBA,OAAQE,EAC7C,QACE,OAAOF,EAEb,CArBA,mBAuBA,iBAKE,WAAYO,GACNA,EAAQC,eACVzC,KAAKyC,aAAeD,EAAQC,cAG1BD,EAAQE,uBACV1C,KAAK0C,qBAAuBF,EAAQE,sBAGtC,IACE1C,KAAK2C,eAAiB,IAAI,EAAAC,eACI,iBAArBJ,EAAQK,SAAwBC,KAAKC,MAAMP,EAAQK,UAAYL,EAAQK,S,CAEhF,MAAOG,GACPC,QAAQC,MAAM,6CACdD,QAAQC,MAAMF,E,CAElB,CA2QF,OAzQU,YAAAG,WAAR,SAAmBC,GACjB,MAA6B,iBAAfA,EACVpD,KAAK2C,eAAeQ,WAAWC,GAC/BA,CACN,EAMQ,YAAAC,aAAR,SAAqBC,EAAkBC,GACrC,IAAMH,EAAaE,EAAQhD,IAErBkD,EACwB,iBAArBF,EAAQG,SAAwBH,EAAQG,SAAWH,EAAQG,SAASC,KAAK,KAElF,MAAO,UAAGF,EAAM,YAAIJ,EACtB,EAEQ,YAAAO,eAAR,SAAuBL,EAAkBC,GACvC,IAAM3B,EAAY5B,KAAKqD,aAAaC,EAASC,GAEvCtB,GAAQ,IAAA2B,mBAAkBhC,GAEhC,OAAI5B,KAAK0C,qBACA1C,KAAK0C,qBAAqBY,EAASC,EAAYtB,GAGjDA,CACT,EAMA,YAAA4B,aAAA,SACET,EACAG,QAAA,IAAAA,IAAAA,EAAA,IAEA,IACE,IAAMD,EAAUtD,KAAKmD,WAAWC,GAEhC,IAAKE,EACH,OAGF,IAAMQ,GAAkB,IAAAC,oBAAmBT,EAASC,EAAYvD,KAAK2C,gBAErE,GAAImB,EACF,OAAOA,EAAgB7B,MAGzB,IAAM+B,EAAchE,KAAK2D,eAAeL,EAASC,GAE3CU,GAAY,IAAAC,sBAAqBZ,EAASC,EAAYS,EAAahE,KAAK2C,gBAE9E,IAAKsB,EACH,OAGF,OAAOA,EAAUhC,K,CACjB,MAAOe,GAGP,YAFAC,QAAQC,MAAM,iBAAkBF,E,CAIpC,EAEA,YAAAmB,oBAAA,SACEf,EACAG,GAIA,YAJA,IAAAA,IAAAA,EAAA,IAIOvB,EAFgBhC,KAAK6D,aAAaT,EAAYG,GAEf,UACxC,EAEA,YAAAa,mBAAA,SACEhB,EACAG,GAIA,YAJA,IAAAA,IAAAA,EAAA,IAIOvB,EAFgBhC,KAAK6D,aAAaT,EAAYG,GAEf,SACxC,EAEA,YAAAc,oBAAA,SACEjB,EACAG,GAIA,YAJA,IAAAA,IAAAA,EAAA,IAIOvB,EAFgBhC,KAAK6D,aAAaT,EAAYG,GAEf,UACxC,EAEA,YAAAe,mBAAA,SACElB,EACAG,GAIA,YAJA,IAAAA,IAAAA,EAAA,IAIOvB,EAFgBhC,KAAK6D,aAAaT,EAAYG,GAEf,SACxC,EAKA,YAAAgB,SAAA,SAASnB,EAAwBG,QAAA,IAAAA,IAAAA,EAAA,IAC/B,IACE,IAAMiB,EAAiBxE,KAAK6D,aAAaT,EAAYG,GAErD,IAAKiB,EACH,OAGF,GAAIxE,KAAKyC,aAAc,CACrB,IAAM,EAAgC,CAAC,EAERzC,KAAK2C,eACjC8B,mBACAC,QAAO,SAACC,GAAM,OAAc,IAAdA,EAAEC,OAAF,IAEMC,SAAQ,SAACF,QACG,IAAtBpB,EAAWoB,EAAErE,OACtB,EAAkBqE,EAAErE,KAAOiD,EAAWoB,EAAErE,KAE5C,IAEAN,KAAKyC,aAAaW,EAAYoB,EAAgBjB,EAAY,E,CAG5D,OAAOiB,C,CACP,MAAOxB,GAGP,YAFAC,QAAQC,MAAM,iBAAkBF,E,CAIpC,EAEA,YAAA8B,gBAAA,SAAgB1B,EAAwBG,GAGtC,YAHsC,IAAAA,IAAAA,EAAA,IAG/BvB,EAFgBhC,KAAKuE,SAASnB,EAAYG,GAEX,UACxC,EAEA,YAAAwB,eAAA,SAAe3B,EAAwBG,GAGrC,YAHqC,IAAAA,IAAAA,EAAA,IAG9BvB,EAFgBhC,KAAKuE,SAASnB,EAAYG,GAEX,SACxC,EAEA,YAAAyB,gBAAA,SAAgB5B,EAAwBG,GAGtC,YAHsC,IAAAA,IAAAA,EAAA,IAG/BvB,EAFgBhC,KAAKuE,SAASnB,EAAYG,GAEX,UACxC,EAEA,YAAA0B,eAAA,SAAe7B,EAAwBG,GAGrC,YAHqC,IAAAA,IAAAA,EAAA,IAG9BvB,EAFgBhC,KAAKuE,SAASnB,EAAYG,GAEX,SACxC,EAMA,YAAA2B,YAAA,SACE9B,EACA+B,EACA5B,QAAA,IAAAA,IAAAA,EAAA,IAEA,IACE,IAAMD,EAAUtD,KAAKmD,WAAWC,GAEhC,IAAKE,EACH,OAGF,IAAM8B,GAAsB,IAAAC,wBAC1B/B,EACA6B,EACA5B,EACAvD,KAAK2C,gBAGP,QAAmC,IAAxByC,EACT,OAAOA,EAGT,IAAMpB,EAAchE,KAAK2D,eAAeL,EAASC,GAEjD,OAAO,IAAA+B,0BACLhC,EACA6B,EACA5B,EACAS,EACAhE,KAAK2C,e,CAEP,MAAOK,GAGP,YAFAC,QAAQC,MAAM,iBAAkBF,E,CAIpC,EAEA,YAAAuC,mBAAA,SACEnC,EACA+B,EACA5B,GAIA,YAJA,IAAAA,IAAAA,EAAA,IAIOvB,EAFehC,KAAKkF,YAAY9B,EAAY+B,EAAa5B,GAE3B,UACvC,EAEA,YAAAiC,kBAAA,SACEpC,EACA+B,EACA5B,GAIA,YAJA,IAAAA,IAAAA,EAAA,IAIOvB,EAFehC,KAAKkF,YAAY9B,EAAY+B,EAAa5B,GAE3B,SACvC,EAEA,YAAAkC,mBAAA,SACErC,EACA+B,EACA5B,GAIA,YAJA,IAAAA,IAAAA,EAAA,IAIOvB,EAFehC,KAAKkF,YAAY9B,EAAY+B,EAAa5B,GAE3B,UACvC,EAEA,YAAAmC,kBAAA,SACEtC,EACA+B,EACA5B,GAIA,YAJA,IAAAA,IAAAA,EAAA,IAIOvB,EAFehC,KAAKkF,YAAY9B,EAAY+B,EAAa5B,GAE3B,SACvC,EAEA,YAAAoC,iBAAA,SACEvC,EACA+B,EACA5B,GAIA,YAJA,IAAAA,IAAAA,EAAA,IAIOvB,EAFehC,KAAKkF,YAAY9B,EAAY+B,EAAa5B,GAE3B,QACvC,EAEA,YAAAqC,kBAAA,SACExC,EACA+B,EACA5B,GAIA,YAJA,IAAAA,IAAAA,EAAA,IAIOvB,EAFehC,KAAKkF,YAAY9B,EAAY+B,EAAa5B,GAE3B,SACvC,EACF,EAjSA,GAAa,EAAAsC,gBAAAA,C,2BC3Db,SAAgBC,EAAmBC,EAA2BxC,GACpD,IAAAyC,EAA+BD,EAAS,UAA7BE,EAAoBF,EAAS,SAAnB9D,EAAU8D,EAAS,MAEhD,GAAiB,WAAbE,EACF,OAAO1C,EAAWyC,KAAe/D,EAC5B,GAAiB,cAAbgE,EACT,OAAO1C,EAAWyC,KAAe/D,EAC5B,GAAqC,iBAA1BsB,EAAWyC,IAA2B1D,MAAMC,QAAQN,GAAQ,CAE5E,IAAMiE,EAAoB3C,EAAWyC,GAErC,GAAiB,OAAbC,EACF,OAA6C,IAAtChE,EAAMkE,QAAQD,GAChB,GAAiB,UAAbD,EACT,OAA6C,IAAtChE,EAAMkE,QAAQD,E,MAElB,GAAqC,iBAA1B3C,EAAWyC,IAA4C,iBAAV/D,EAAoB,CAIjF,GAFMiE,EAAoB3C,EAAWyC,GAEpB,aAAbC,EACF,OAA6C,IAAtCC,EAAkBC,QAAQlE,GAC5B,GAAiB,gBAAbgE,EACT,OAA6C,IAAtCC,EAAkBC,QAAQlE,GAC5B,GAAiB,eAAbgE,EACT,OAAOC,EAAkBE,WAAWnE,GAC/B,GAAiB,aAAbgE,EACT,OAAOC,EAAkBG,SAASpE,E,MAE/B,GAAqC,iBAA1BsB,EAAWyC,IAA4C,iBAAV/D,EAAoB,CAIjF,GAFMiE,EAAoB3C,EAAWyC,GAEpB,gBAAbC,EACF,OAAOC,EAAoBjE,EACtB,GAAiB,wBAAbgE,EACT,OAAOC,GAAqBjE,EACvB,GAAiB,aAAbgE,EACT,OAAOC,EAAoBjE,EACtB,GAAiB,qBAAbgE,EACT,OAAOC,GAAqBjE,C,CAIhC,OAAO,CACT,C,uGA7CA,uBA+CA,mCAAgBqE,EACdC,EACAhD,GAEA,MAAI,cAAegD,EACVT,EAAmBS,EAAYhD,GAGpC,QAASgD,GAAcjE,MAAMC,QAAQgE,EAAWC,KAC3CD,EAAWC,IAAIC,OAAM,SAACC,GAAM,OAAAJ,EAAwBI,EAAGnD,EAA3B,IAGjC,OAAQgD,GAAcjE,MAAMC,QAAQgE,EAAWI,IAC1CJ,EAAWI,GAAGC,MAAK,SAACF,GAAM,OAAAJ,EAAwBI,EAAGnD,EAA3B,IAG/B,QAASgD,GAAcjE,MAAMC,QAAQgE,EAAWM,KAC3CN,EAAWM,IAAIJ,OACpB,SAACC,GACC,OAKM,IALNJ,EACE,CACEE,IAAKD,EAAWM,KAElBtD,EAJF,MASFjB,MAAMC,QAAQgE,IACTA,EAAWE,OAAM,SAACC,GAAM,OAAAJ,EAAwBI,EAAGnD,EAA3B,GAInC,C,2BCxEA,SAAgBuD,EAAoCC,EAAWzG,GAC7D,GAA2B,iBAAhByG,EAAOzG,IAAqC,MAAhByG,EAAOzG,GAC5C,IACEyG,EAAOzG,GAAOwC,KAAKC,MAAMgE,EAAOzG,G,CAChC,MAAO0C,GACPC,QAAQC,MAAM,qBAAsBF,E,CAIxC,OAAO+D,CACT,C,4GAVA,qCAYA,iBAOE,WAAYC,GACVhH,KAAKiH,cAAgBD,EAAaC,cAClCjH,KAAKkH,SAAWF,EAAaE,SAC7BlH,KAAKmH,SAAWH,EAAaG,SAC7BnH,KAAKuD,WAAayD,EAAazD,WAC/BvD,KAAKoH,SAAWJ,EAAaI,QAC/B,CAqCF,OAnCE,YAAAC,YAAA,WACE,OAAOrH,KAAKkH,QACd,EAEA,YAAAI,iBAAA,WACE,OAAOtH,KAAKiH,aACd,EAEA,YAAAxC,iBAAA,WACE,OAAOzE,KAAKuD,UACd,EAEA,YAAAgE,aAAA,SAAaC,GACX,OAAOxH,KAAKuD,WAAWkE,MAAK,SAAC9C,GAAM,OAAAA,EAAErE,MAAQkH,CAAV,GACrC,EAEA,YAAAE,WAAA,SAAWC,GACT,IAAMC,EAAU5H,KAAKmH,SAASM,MAAK,SAACI,GAAM,OAAAA,EAAEvH,MAAQqH,CAAV,IAE1C,GAAKC,EAIL,OAAOd,EAAiCc,EAAS,aACnD,EAEA,YAAAzE,WAAA,SAAWC,GACT,IAAME,EAAUtD,KAAKoH,SAASK,MAAK,SAACI,GAAM,OAAAA,EAAEvH,MAAQ8C,CAAV,IAE1C,GAAKE,EAIL,OAAOA,CACT,EACF,EAlDA,GAAa,EAAAV,eAAAA,C,gOCXb,aACA,SAEA,SAAgBkF,EACdC,EACAxE,EACAS,EACArB,GAEA,OAAOoF,EAAQN,MAAK,SAACM,GACnB,QAAI/D,EAAc+D,EAAQC,cAMvB,IAAAC,4BAC6B,iBAArBF,EAAQZ,UAA8C,MAArBY,EAAQZ,SAC5CrE,KAAKC,MAAMgF,EAAQZ,UACnBY,EAAQZ,SACZ5D,EACAZ,GAON,GACF,CAGA,SAAgBuF,EACdC,EACAnE,GAIA,IAFA,IAAIoE,EAAQ,EAEa,MAAAD,EAAeE,WAAf,eAA2B,CAA/C,IAAMA,EAAU,KAGnB,GAAIrE,IAFJoE,GAASC,EAAWL,YAGlB,OAAOK,C,CAKb,CAEA,SAASC,EACPhF,EACAC,EACAZ,GAEA,GAAKW,EAAQiF,MAIb,OAAOjF,EAAQiF,MAAMd,MAAK,SAACe,GACzB,OAAIA,EAAEjC,YACG,IAAAD,yBAAwBkC,EAAEjC,WAAYhD,KAG3CiF,EAAErB,WACG,IAAAc,4BAA2BO,EAAErB,SAAU5D,EAAYZ,EAI9D,GACF,CAgBA,SAAgBuB,EACdZ,EACAC,EACAS,EACArB,GAEA,IAAMwF,EAAiBL,EACrBxE,EAAQyE,QACRxE,EACAS,EACArB,GAGF,GAAKwF,EAAL,CAIA,IAAME,EAAaH,EAAqBC,EAAgBnE,GAExD,GAAKqE,EAAL,CAIA,IAAM7D,EAAiB6D,EAAWpE,UAE5BA,EAAYX,EAAQmF,WAAWhB,MAAK,SAACiB,GACzC,OAAOA,EAAEzG,QAAUuC,CACrB,IAEA,GAAKP,EAIL,OAAOA,C,EACT,CApHA,sBA6BA,yBAuCA,8BACEX,EACAC,EACAZ,GAEA,IAAM4F,EAAQD,EAAqBhF,EAASC,EAAYZ,GAExD,GAAK4F,GAAUA,EAAMtE,UAIrB,OAAOX,EAAQmF,WAAWhB,MAAK,SAACiB,GAAM,OAAAA,EAAEzG,QAAUsG,EAAMtE,SAAlB,GACxC,EAEA,yBAoCA,kCACEX,EACA6B,EACA5B,EACAZ,GAEA,IAAM4F,EAAQD,EAAqBhF,EAASC,EAAYZ,GAExD,GAAK4F,GAAUA,EAAMI,UAIrB,OAAOJ,EAAMI,UAAUxD,EACzB,EAEA,oCACE7B,EACA6B,EACA5B,EACAS,EACArB,G,MAGMiG,EAAkBtF,EAAQsF,gBAEhC,GAAKA,EAAL,CAKA,IAAMC,EAAiBD,EAAgBnB,MAAK,SAACiB,GAC3C,OAAOA,EAAEpI,MAAQ6E,CACnB,IAEA,GAAK0D,EAAL,CAIA,IAAM5E,EAAYC,EAAqBZ,EAASC,EAAYS,EAAarB,GAEzE,GAAKsB,EAAL,CAIA,IAAM6E,EAA2C,QAAnB,EAAA7E,EAAU0E,iBAAS,eAAElB,MAAK,SAACiB,GACvD,OAAOA,EAAEpI,MAAQ6E,CACnB,IAEA,IAAK2D,EACH,OAAOD,EAAeE,aAGxB,GAAID,EAAsBE,UAAW,CACnC,IAAMC,EAAWH,EAAsBE,UAAUvB,MAAK,SAACyB,GACrD,OAAIA,EAAE3C,YACG,IAAAD,yBACmB,iBAAjB4C,EAAE3C,WAA0BzD,KAAKC,MAAMmG,EAAE3C,YAAc2C,EAAE3C,WAChEhD,KAIA2F,EAAE/B,WACG,IAAAc,4BACiB,iBAAfiB,EAAE/B,UAAwC,MAAf+B,EAAE/B,SAChCrE,KAAKC,MAAMmG,EAAE/B,UACb+B,EAAE/B,SACN5D,EACAZ,EAKN,IAEA,GAAIsG,EACF,OAAOA,EAAShH,K,CAIpB,OAAO6G,EAAsB7G,K,GAC/B,C,ugBCpNA,YACA,W,qICAA,aAGA,SAAgBkH,EAAiBvB,EAAkBrE,GACjD,OAAO,IAAA+C,yBAAwBsB,EAAQrB,WAAuChD,EAChF,CAFA,qBAIA,sCAAgB0E,EACdmB,EACA7F,EACAZ,GAEA,GAAsB,MAAlByG,EACF,OAAO,EAGT,GAA6B,iBAAlBA,EAA4B,CACrC,IAAMxB,EAAUjF,EAAe+E,WAAW0B,GAE1C,QAAIxB,GACKuB,EAAiBvB,EAASrE,E,CAMrC,GAA6B,iBAAlB6F,EAA4B,CACrC,GAAI,QAASA,GAAiB9G,MAAMC,QAAQ6G,EAAc5C,KACxD,OAAO4C,EAAc5C,IAAIC,OAAM,SAAC4C,GAC9B,OAAApB,EAA2BoB,EAAc9F,EAAYZ,EAArD,IAIJ,GAAI,OAAQyG,GAAiB9G,MAAMC,QAAQ6G,EAAczC,IACvD,OAAOyC,EAAczC,GAAGC,MAAK,SAACyC,GAC5B,OAAApB,EAA2BoB,EAAc9F,EAAYZ,EAArD,IAIJ,GAAI,QAASyG,GAAiB9G,MAAMC,QAAQ6G,EAAcvC,KACxD,OAAOuC,EAAcvC,IAAIJ,OACvB,SAAC4C,GACC,OAAyE,IAAzEpB,EAA2BoB,EAAc9F,EAAYZ,EAArD,G,CAKR,QAAIL,MAAMC,QAAQ6G,IACTA,EAAc3C,OAAM,SAAC4C,GAC1B,OAAApB,EAA2BoB,EAAc9F,EAAYZ,EAArD,GAKN,C,GCtDI2G,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBrH,IAAjBsH,EACH,OAAOA,EAAa7J,QAGrB,IAAIC,EAASyJ,EAAyBE,GAAY,CAGjD5J,QAAS,CAAC,GAOX,OAHA8J,EAAoBF,GAAUG,KAAK9J,EAAOD,QAASC,EAAQA,EAAOD,QAAS2J,GAGpE1J,EAAOD,OACf,CCnB0B2J,CAAoB,I,MDF1CD,C","sources":["webpack://FeaturevisorSDK/webpack/universalModuleDefinition","webpack://FeaturevisorSDK/../../node_modules/murmurhash/murmurhash.js","webpack://FeaturevisorSDK/./src/bucket.ts","webpack://FeaturevisorSDK/./src/client.ts","webpack://FeaturevisorSDK/./src/conditions.ts","webpack://FeaturevisorSDK/./src/datafileReader.ts","webpack://FeaturevisorSDK/./src/feature.ts","webpack://FeaturevisorSDK/./src/index.ts","webpack://FeaturevisorSDK/./src/segments.ts","webpack://FeaturevisorSDK/webpack/bootstrap","webpack://FeaturevisorSDK/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FeaturevisorSDK\"] = factory();\n\telse\n\t\troot[\"FeaturevisorSDK\"] = factory();\n})(this, () => {\nreturn ","(function(){\n const _global = this;\n\n const createBuffer = (val) => new TextEncoder().encode(val)\n\n /**\n * JS Implementation of MurmurHash2\n *\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/murmurhash-js\n * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {Uint8Array | string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV2(str, seed) {\n if (typeof str === 'string') str = createBuffer(str);\n let\n l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n\n while (l >= 4) {\n k =\n ((str[i] & 0xff)) |\n ((str[++i] & 0xff) << 8) |\n ((str[++i] & 0xff) << 16) |\n ((str[++i] & 0xff) << 24);\n\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n k ^= k >>> 24;\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n l -= 4;\n ++i;\n }\n\n switch (l) {\n case 3: h ^= (str[i + 2] & 0xff) << 16;\n case 2: h ^= (str[i + 1] & 0xff) << 8;\n case 1: h ^= (str[i] & 0xff);\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n }\n\n h ^= h >>> 13;\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n h ^= h >>> 15;\n\n return h >>> 0;\n };\n\n /*\n * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)\n *\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/murmurhash-js\n * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {Uint8Array | string} key ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV3(key, seed) {\n if (typeof key === 'string') key = createBuffer(key);\n\n let remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;\n\n remainder = key.length & 3; // key.length % 4\n bytes = key.length - remainder;\n h1 = seed;\n c1 = 0xcc9e2d51;\n c2 = 0x1b873593;\n i = 0;\n\n while (i < bytes) {\n k1 =\n ((key[i] & 0xff)) |\n ((key[++i] & 0xff) << 8) |\n ((key[++i] & 0xff) << 16) |\n ((key[++i] & 0xff) << 24);\n ++i;\n\n k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\n\n h1 ^= k1;\n h1 = (h1 << 13) | (h1 >>> 19);\n h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\n h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\n }\n\n k1 = 0;\n\n switch (remainder) {\n case 3: k1 ^= (key[i + 2] & 0xff) << 16;\n case 2: k1 ^= (key[i + 1] & 0xff) << 8;\n case 1: k1 ^= (key[i] & 0xff);\n\n k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= k1;\n }\n\n h1 ^= key.length;\n\n h1 ^= h1 >>> 16;\n h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= h1 >>> 13;\n h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\n h1 ^= h1 >>> 16;\n\n return h1 >>> 0;\n }\n\n const murmur = MurmurHashV3;\n murmur.v2 = MurmurHashV2;\n murmur.v3 = MurmurHashV3;\n\n if (typeof(module) != 'undefined') {\n module.exports = murmur;\n } else {\n const _previousRoot = _global.murmur;\n murmur.noConflict = function() {\n _global.murmur = _previousRoot;\n return murmur;\n }\n _global.murmur = murmur;\n }\n}());\n","import * as murmurhash from \"murmurhash\";\n\nconst HASH_SEED = 1;\nconst MAX_HASH_VALUE = Math.pow(2, 32);\n\nexport const MAX_BUCKETED_NUMBER = 100000; // 100% * 1000 to include three decimal places in the same integer value\n\nexport function getBucketedNumber(bucketKey: string): number {\n const hashValue = murmurhash.v3(bucketKey, HASH_SEED);\n const ratio = hashValue / MAX_HASH_VALUE;\n\n return Math.floor(ratio * MAX_BUCKETED_NUMBER);\n}\n","import {\n Attributes,\n VariationValue,\n VariableValue,\n Feature,\n DatafileContent,\n BucketKey,\n BucketValue,\n FeatureKey,\n VariableObjectValue,\n} from \"@featurevisor/types\";\nimport { DatafileReader } from \"./datafileReader\";\nimport {\n getBucketedVariation,\n getBucketedVariableValue,\n getForcedVariation,\n getForcedVariableValue,\n} from \"./feature\";\nimport { getBucketedNumber } from \"./bucket\";\n\nexport type ActivationCallback = (\n featureName: string,\n variation: VariationValue,\n attributes: Attributes,\n captureAttributes: Attributes,\n) => void;\n\nexport type ConfigureBucketValue = (feature, attributes, bucketValue: BucketValue) => BucketValue;\nexport interface SdkOptions {\n datafile: DatafileContent | string;\n onActivation?: ActivationCallback;\n configureBucketValue?: ConfigureBucketValue;\n}\n\n// union of VariableValue and VariationValue\ntype FieldType = \"string\" | \"integer\" | \"double\" | \"boolean\" | \"array\" | \"object\";\ntype ValueType = VariableValue;\n\nexport function getValueByType(value: ValueType, fieldType: FieldType): ValueType {\n if (value === undefined) {\n return undefined;\n }\n\n switch (fieldType) {\n case \"string\":\n return typeof value === \"string\" ? value : undefined;\n case \"integer\":\n return parseInt(value as string, 10);\n case \"double\":\n return parseFloat(value as string);\n case \"boolean\":\n return value === true;\n case \"array\":\n return Array.isArray(value) ? value : undefined;\n case \"object\":\n return typeof value === \"object\" ? value : undefined;\n default:\n return value;\n }\n}\n\nexport class FeaturevisorSDK {\n private onActivation?: ActivationCallback;\n private datafileReader: DatafileReader;\n private configureBucketValue?: ConfigureBucketValue;\n\n constructor(options: SdkOptions) {\n if (options.onActivation) {\n this.onActivation = options.onActivation;\n }\n\n if (options.configureBucketValue) {\n this.configureBucketValue = options.configureBucketValue;\n }\n\n try {\n this.datafileReader = new DatafileReader(\n typeof options.datafile === \"string\" ? JSON.parse(options.datafile) : options.datafile,\n );\n } catch (e) {\n console.error(`Featurevisor could not parse the datafile`);\n console.error(e);\n }\n }\n\n private getFeature(featureKey: string | Feature): Feature | undefined {\n return typeof featureKey === \"string\"\n ? this.datafileReader.getFeature(featureKey) // only key provided\n : featureKey; // full feature provided\n }\n\n /**\n * Bucketing\n */\n\n private getBucketKey(feature: Feature, attributes: Attributes): BucketKey {\n const featureKey = feature.key;\n\n const prefix =\n typeof feature.bucketBy === \"string\" ? feature.bucketBy : feature.bucketBy.join(\"_\");\n\n return `${prefix}_${featureKey}`;\n }\n\n private getBucketValue(feature: Feature, attributes: Attributes): BucketValue {\n const bucketKey = this.getBucketKey(feature, attributes);\n\n const value = getBucketedNumber(bucketKey);\n\n if (this.configureBucketValue) {\n return this.configureBucketValue(feature, attributes, value);\n }\n\n return value;\n }\n\n /**\n * Variation\n */\n\n getVariation(\n featureKey: FeatureKey | Feature,\n attributes: Attributes = {},\n ): VariationValue | undefined {\n try {\n const feature = this.getFeature(featureKey);\n\n if (!feature) {\n return undefined;\n }\n\n const forcedVariation = getForcedVariation(feature, attributes, this.datafileReader);\n\n if (forcedVariation) {\n return forcedVariation.value;\n }\n\n const bucketValue = this.getBucketValue(feature, attributes);\n\n const variation = getBucketedVariation(feature, attributes, bucketValue, this.datafileReader);\n\n if (!variation) {\n return undefined;\n }\n\n return variation.value;\n } catch (e) {\n console.error(\"[Featurevisor]\", e);\n\n return undefined;\n }\n }\n\n getVariationBoolean(\n featureKey: FeatureKey | Feature,\n attributes: Attributes = {},\n ): boolean | undefined {\n const variationValue = this.getVariation(featureKey, attributes);\n\n return getValueByType(variationValue, \"boolean\") as boolean | undefined;\n }\n\n getVariationString(\n featureKey: FeatureKey | Feature,\n attributes: Attributes = {},\n ): string | undefined {\n const variationValue = this.getVariation(featureKey, attributes);\n\n return getValueByType(variationValue, \"string\") as string | undefined;\n }\n\n getVariationInteger(\n featureKey: FeatureKey | Feature,\n attributes: Attributes = {},\n ): number | undefined {\n const variationValue = this.getVariation(featureKey, attributes);\n\n return getValueByType(variationValue, \"integer\") as number | undefined;\n }\n\n getVariationDouble(\n featureKey: FeatureKey | Feature,\n attributes: Attributes = {},\n ): number | undefined {\n const variationValue = this.getVariation(featureKey, attributes);\n\n return getValueByType(variationValue, \"double\") as number | undefined;\n }\n\n /**\n * Activate\n */\n activate(featureKey: FeatureKey, attributes: Attributes = {}): VariationValue | undefined {\n try {\n const variationValue = this.getVariation(featureKey, attributes);\n\n if (!variationValue) {\n return undefined;\n }\n\n if (this.onActivation) {\n const captureAttributes: Attributes = {};\n\n const attributesForCapturing = this.datafileReader\n .getAllAttributes()\n .filter((a) => a.capture === true);\n\n attributesForCapturing.forEach((a) => {\n if (typeof attributes[a.key] !== \"undefined\") {\n captureAttributes[a.key] = attributes[a.key];\n }\n });\n\n this.onActivation(featureKey, variationValue, attributes, captureAttributes);\n }\n\n return variationValue;\n } catch (e) {\n console.error(\"[Featurevisor]\", e);\n\n return undefined;\n }\n }\n\n activateBoolean(featureKey: FeatureKey, attributes: Attributes = {}): boolean | undefined {\n const variationValue = this.activate(featureKey, attributes);\n\n return getValueByType(variationValue, \"boolean\") as boolean | undefined;\n }\n\n activateString(featureKey: FeatureKey, attributes: Attributes = {}): string | undefined {\n const variationValue = this.activate(featureKey, attributes);\n\n return getValueByType(variationValue, \"string\") as string | undefined;\n }\n\n activateInteger(featureKey: FeatureKey, attributes: Attributes = {}): number | undefined {\n const variationValue = this.activate(featureKey, attributes);\n\n return getValueByType(variationValue, \"integer\") as number | undefined;\n }\n\n activateDouble(featureKey: FeatureKey, attributes: Attributes = {}): number | undefined {\n const variationValue = this.activate(featureKey, attributes);\n\n return getValueByType(variationValue, \"double\") as number | undefined;\n }\n\n /**\n * Variable\n */\n\n getVariable(\n featureKey: FeatureKey | Feature,\n variableKey: string,\n attributes: Attributes = {},\n ): VariableValue | undefined {\n try {\n const feature = this.getFeature(featureKey);\n\n if (!feature) {\n return undefined;\n }\n\n const forcedVariableValue = getForcedVariableValue(\n feature,\n variableKey,\n attributes,\n this.datafileReader,\n );\n\n if (typeof forcedVariableValue !== \"undefined\") {\n return forcedVariableValue;\n }\n\n const bucketValue = this.getBucketValue(feature, attributes);\n\n return getBucketedVariableValue(\n feature,\n variableKey,\n attributes,\n bucketValue,\n this.datafileReader,\n );\n } catch (e) {\n console.error(\"[Featurevisor]\", e);\n\n return undefined;\n }\n }\n\n getVariableBoolean(\n featureKey: FeatureKey | Feature,\n variableKey: string,\n attributes: Attributes = {},\n ): boolean | undefined {\n const variableValue = this.getVariable(featureKey, variableKey, attributes);\n\n return getValueByType(variableValue, \"boolean\") as boolean | undefined;\n }\n\n getVariableString(\n featureKey: FeatureKey | Feature,\n variableKey: string,\n attributes: Attributes = {},\n ): string | undefined {\n const variableValue = this.getVariable(featureKey, variableKey, attributes);\n\n return getValueByType(variableValue, \"string\") as string | undefined;\n }\n\n getVariableInteger(\n featureKey: FeatureKey | Feature,\n variableKey: string,\n attributes: Attributes = {},\n ): number | undefined {\n const variableValue = this.getVariable(featureKey, variableKey, attributes);\n\n return getValueByType(variableValue, \"integer\") as number | undefined;\n }\n\n getVariableDouble(\n featureKey: FeatureKey | Feature,\n variableKey: string,\n attributes: Attributes = {},\n ): number | undefined {\n const variableValue = this.getVariable(featureKey, variableKey, attributes);\n\n return getValueByType(variableValue, \"double\") as number | undefined;\n }\n\n getVariableArray(\n featureKey: FeatureKey | Feature,\n variableKey: string,\n attributes: Attributes = {},\n ): string[] | undefined {\n const variableValue = this.getVariable(featureKey, variableKey, attributes);\n\n return getValueByType(variableValue, \"array\") as string[] | undefined;\n }\n\n getVariableObject<T>(\n featureKey: FeatureKey | Feature,\n variableKey: string,\n attributes: Attributes = {},\n ): T | undefined {\n const variableValue = this.getVariable(featureKey, variableKey, attributes);\n\n return getValueByType(variableValue, \"object\") as T | undefined;\n }\n}\n","import { Attributes, Condition, PlainCondition } from \"@featurevisor/types\";\n\nexport function conditionIsMatched(condition: PlainCondition, attributes: Attributes): boolean {\n const { attribute, operator, value } = condition;\n\n if (operator === \"equals\") {\n return attributes[attribute] === value;\n } else if (operator === \"notEquals\") {\n return attributes[attribute] !== value;\n } else if (typeof attributes[attribute] === \"string\" && Array.isArray(value)) {\n // array\n const valueInAttributes = attributes[attribute] as string;\n\n if (operator === \"in\") {\n return value.indexOf(valueInAttributes) !== -1;\n } else if (operator === \"notIn\") {\n return value.indexOf(valueInAttributes) === -1;\n }\n } else if (typeof attributes[attribute] === \"string\" && typeof value === \"string\") {\n // string\n const valueInAttributes = attributes[attribute] as string;\n\n if (operator === \"contains\") {\n return valueInAttributes.indexOf(value) !== -1;\n } else if (operator === \"notContains\") {\n return valueInAttributes.indexOf(value) === -1;\n } else if (operator === \"startsWith\") {\n return valueInAttributes.startsWith(value);\n } else if (operator === \"endsWith\") {\n return valueInAttributes.endsWith(value);\n }\n } else if (typeof attributes[attribute] === \"number\" && typeof value === \"number\") {\n // numeric\n const valueInAttributes = attributes[attribute] as number;\n\n if (operator === \"greaterThan\") {\n return valueInAttributes > value;\n } else if (operator === \"greaterThanOrEquals\") {\n return valueInAttributes >= value;\n } else if (operator === \"lessThan\") {\n return valueInAttributes < value;\n } else if (operator === \"lessThanOrEquals\") {\n return valueInAttributes <= value;\n }\n }\n\n return false;\n}\n\nexport function allConditionsAreMatched(\n conditions: Condition[] | Condition,\n attributes: Attributes,\n): boolean {\n if (\"attribute\" in conditions) {\n return conditionIsMatched(conditions, attributes);\n }\n\n if (\"and\" in conditions && Array.isArray(conditions.and)) {\n return conditions.and.every((c) => allConditionsAreMatched(c, attributes));\n }\n\n if (\"or\" in conditions && Array.isArray(conditions.or)) {\n return conditions.or.some((c) => allConditionsAreMatched(c, attributes));\n }\n\n if (\"not\" in conditions && Array.isArray(conditions.not)) {\n return conditions.not.every(\n (c) =>\n allConditionsAreMatched(\n {\n and: conditions.not,\n },\n attributes,\n ) === false,\n );\n }\n\n if (Array.isArray(conditions)) {\n return conditions.every((c) => allConditionsAreMatched(c, attributes));\n }\n\n return false;\n}\n","import {\n Feature,\n Segment,\n DatafileContent,\n Attribute,\n AttributeKey,\n SegmentKey,\n FeatureKey,\n} from \"@featurevisor/types\";\n\nexport function parseJsonConditionsIfStringified<T>(record: T, key: string): T {\n if (typeof record[key] === \"string\" && record[key] !== \"*\") {\n try {\n record[key] = JSON.parse(record[key]);\n } catch (e) {\n console.error(\"Error parsing JSON\", e);\n }\n }\n\n return record;\n}\n\nexport class DatafileReader {\n private schemaVersion: string;\n private revision: string;\n private attributes: Attribute[];\n private segments: Segment[];\n private features: Feature[];\n\n constructor(datafileJson: DatafileContent) {\n this.schemaVersion = datafileJson.schemaVersion;\n this.revision = datafileJson.revision;\n this.segments = datafileJson.segments;\n this.attributes = datafileJson.attributes;\n this.features = datafileJson.features;\n }\n\n getRevision(): string {\n return this.revision;\n }\n\n getSchemaVersion(): string {\n return this.schemaVersion;\n }\n\n getAllAttributes(): Attribute[] {\n return this.attributes;\n }\n\n getAttribute(attributeKey: AttributeKey): Attribute | undefined {\n return this.attributes.find((a) => a.key === attributeKey);\n }\n\n getSegment(segmentKey: SegmentKey): Segment | undefined {\n const segment = this.segments.find((s) => s.key === segmentKey);\n\n if (!segment) {\n return undefined;\n }\n\n return parseJsonConditionsIfStringified(segment, \"conditions\");\n }\n\n getFeature(featureKey: FeatureKey): Feature | undefined {\n const feature = this.features.find((s) => s.key === featureKey);\n\n if (!feature) {\n return undefined;\n }\n\n return feature;\n }\n}\n","import {\n Allocation,\n Attributes,\n Traffic,\n Feature,\n Variation,\n VariableKey,\n VariableValue,\n Force,\n} from \"@featurevisor/types\";\nimport { DatafileReader } from \"./datafileReader\";\nimport { allGroupSegmentsAreMatched } from \"./segments\";\nimport { allConditionsAreMatched } from \"./conditions\";\n\nexport function getMatchedTraffic(\n traffic: Traffic[],\n attributes: Attributes,\n bucketValue: number,\n datafileReader: DatafileReader,\n): Traffic | undefined {\n return traffic.find((traffic) => {\n if (bucketValue > traffic.percentage) {\n // out of bucket range\n return false;\n }\n\n if (\n !allGroupSegmentsAreMatched(\n typeof traffic.segments === \"string\" && traffic.segments !== \"*\"\n ? JSON.parse(traffic.segments)\n : traffic.segments,\n attributes,\n datafileReader,\n )\n ) {\n return false;\n }\n\n return true;\n });\n}\n\n// @TODO: make this function better with tests\nexport function getMatchedAllocation(\n matchedTraffic: Traffic,\n bucketValue: number,\n): Allocation | undefined {\n let total = 0;\n\n for (const allocation of matchedTraffic.allocation) {\n total += allocation.percentage;\n\n if (bucketValue <= total) {\n return allocation;\n }\n }\n\n return undefined;\n}\n\nfunction findForceFromFeature(\n feature: Feature,\n attributes: Attributes,\n datafileReader: DatafileReader,\n): Force | undefined {\n if (!feature.force) {\n return undefined;\n }\n\n return feature.force.find((f: Force) => {\n if (f.conditions) {\n return allConditionsAreMatched(f.conditions, attributes);\n }\n\n if (f.segments) {\n return allGroupSegmentsAreMatched(f.segments, attributes, datafileReader);\n }\n\n return false;\n });\n}\n\nexport function getForcedVariation(\n feature: Feature,\n attributes: Attributes,\n datafileReader: DatafileReader,\n): Variation | undefined {\n const force = findForceFromFeature(feature, attributes, datafileReader);\n\n if (!force || !force.variation) {\n return undefined;\n }\n\n return feature.variations.find((v) => v.value === force.variation);\n}\n\nexport function getBucketedVariation(\n feature: Feature,\n attributes: Attributes,\n bucketValue: number,\n datafileReader: DatafileReader,\n): Variation | undefined {\n const matchedTraffic = getMatchedTraffic(\n feature.traffic,\n attributes,\n bucketValue,\n datafileReader,\n );\n\n if (!matchedTraffic) {\n return undefined;\n }\n\n const allocation = getMatchedAllocation(matchedTraffic, bucketValue);\n\n if (!allocation) {\n return undefined;\n }\n\n const variationValue = allocation.variation;\n\n const variation = feature.variations.find((v) => {\n return v.value === variationValue;\n });\n\n if (!variation) {\n return undefined;\n }\n\n return variation;\n}\n\nexport function getForcedVariableValue(\n feature: Feature,\n variableKey: VariableKey,\n attributes: Attributes,\n datafileReader: DatafileReader,\n): VariableValue | undefined {\n const force = findForceFromFeature(feature, attributes, datafileReader);\n\n if (!force || !force.variables) {\n return undefined;\n }\n\n return force.variables[variableKey];\n}\n\nexport function getBucketedVariableValue(\n feature: Feature,\n variableKey: VariableKey,\n attributes: Attributes,\n bucketValue: number,\n datafileReader: DatafileReader,\n): VariableValue | undefined {\n // all variables\n const variablesSchema = feature.variablesSchema;\n\n if (!variablesSchema) {\n return undefined;\n }\n\n // single variable\n const variableSchema = variablesSchema.find((v) => {\n return v.key === variableKey;\n });\n\n if (!variableSchema) {\n return undefined;\n }\n\n const variation = getBucketedVariation(feature, attributes, bucketValue, datafileReader);\n\n if (!variation) {\n return undefined;\n }\n\n const variableFromVariation = variation.variables?.find((v) => {\n return v.key === variableKey;\n });\n\n if (!variableFromVariation) {\n return variableSchema.defaultValue;\n }\n\n if (variableFromVariation.overrides) {\n const override = variableFromVariation.overrides.find((o) => {\n if (o.conditions) {\n return allConditionsAreMatched(\n typeof o.conditions === \"string\" ? JSON.parse(o.conditions) : o.conditions,\n attributes,\n );\n }\n\n if (o.segments) {\n return allGroupSegmentsAreMatched(\n typeof o.segments === \"string\" && o.segments !== \"*\"\n ? JSON.parse(o.segments)\n : o.segments,\n attributes,\n datafileReader,\n );\n }\n\n return false;\n });\n\n if (override) {\n return override.value;\n }\n }\n\n return variableFromVariation.value;\n}\n","export * from \"./bucket\";\nexport * from \"./client\";\n","import { Attributes, GroupSegment, Segment, Condition } from \"@featurevisor/types\";\nimport { allConditionsAreMatched } from \"./conditions\";\nimport { DatafileReader } from \"./datafileReader\";\n\nexport function segmentIsMatched(segment: Segment, attributes: Attributes): boolean {\n return allConditionsAreMatched(segment.conditions as Condition | Condition[], attributes);\n}\n\nexport function allGroupSegmentsAreMatched(\n groupSegments: GroupSegment | GroupSegment[] | \"*\",\n attributes: Attributes,\n datafileReader: DatafileReader,\n): boolean {\n if (groupSegments === \"*\") {\n return true;\n }\n\n if (typeof groupSegments === \"string\") {\n const segment = datafileReader.getSegment(groupSegments);\n\n if (segment) {\n return segmentIsMatched(segment, attributes);\n }\n\n return false;\n }\n\n if (typeof groupSegments === \"object\") {\n if (\"and\" in groupSegments && Array.isArray(groupSegments.and)) {\n return groupSegments.and.every((groupSegment) =>\n allGroupSegmentsAreMatched(groupSegment, attributes, datafileReader),\n );\n }\n\n if (\"or\" in groupSegments && Array.isArray(groupSegments.or)) {\n return groupSegments.or.some((groupSegment) =>\n allGroupSegmentsAreMatched(groupSegment, attributes, datafileReader),\n );\n }\n\n if (\"not\" in groupSegments && Array.isArray(groupSegments.not)) {\n return groupSegments.not.every(\n (groupSegment) =>\n allGroupSegmentsAreMatched(groupSegment, attributes, datafileReader) === false,\n );\n }\n }\n\n if (Array.isArray(groupSegments)) {\n return groupSegments.every((groupSegment) =>\n allGroupSegmentsAreMatched(groupSegment, attributes, datafileReader),\n );\n }\n\n return false;\n}\n","// 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","define","amd","this","createBuffer","val","TextEncoder","encode","MurmurHashV3","key","seed","remainder","bytes","h1","h1b","c1","c2","k1","i","length","murmur","v2","str","k","l","h","v3","MAX_HASH_VALUE","Math","pow","MAX_BUCKETED_NUMBER","bucketKey","ratio","murmurhash","floor","getValueByType","value","fieldType","undefined","parseInt","parseFloat","Array","isArray","options","onActivation","configureBucketValue","datafileReader","DatafileReader","datafile","JSON","parse","e","console","error","getFeature","featureKey","getBucketKey","feature","attributes","prefix","bucketBy","join","getBucketValue","getBucketedNumber","getVariation","forcedVariation","getForcedVariation","bucketValue","variation","getBucketedVariation","getVariationBoolean","getVariationString","getVariationInteger","getVariationDouble","activate","variationValue","getAllAttributes","filter","a","capture","forEach","activateBoolean","activateString","activateInteger","activateDouble","getVariable","variableKey","forcedVariableValue","getForcedVariableValue","getBucketedVariableValue","getVariableBoolean","getVariableString","getVariableInteger","getVariableDouble","getVariableArray","getVariableObject","FeaturevisorSDK","conditionIsMatched","condition","attribute","operator","valueInAttributes","indexOf","startsWith","endsWith","allConditionsAreMatched","conditions","and","every","c","or","some","not","parseJsonConditionsIfStringified","record","datafileJson","schemaVersion","revision","segments","features","getRevision","getSchemaVersion","getAttribute","attributeKey","find","getSegment","segmentKey","segment","s","getMatchedTraffic","traffic","percentage","allGroupSegmentsAreMatched","getMatchedAllocation","matchedTraffic","total","allocation","findForceFromFeature","force","f","variations","v","variables","variablesSchema","variableSchema","variableFromVariation","defaultValue","overrides","override","o","segmentIsMatched","groupSegments","groupSegment","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call"],"sourceRoot":""}
|
package/lib/client.d.ts
CHANGED
|
@@ -6,8 +6,8 @@ export interface SdkOptions {
|
|
|
6
6
|
onActivation?: ActivationCallback;
|
|
7
7
|
configureBucketValue?: ConfigureBucketValue;
|
|
8
8
|
}
|
|
9
|
-
type FieldType = "string" | "integer" | "double" | "boolean" | "array";
|
|
10
|
-
type ValueType =
|
|
9
|
+
type FieldType = "string" | "integer" | "double" | "boolean" | "array" | "object";
|
|
10
|
+
type ValueType = VariableValue;
|
|
11
11
|
export declare function getValueByType(value: ValueType, fieldType: FieldType): ValueType;
|
|
12
12
|
export declare class FeaturevisorSDK {
|
|
13
13
|
private onActivation?;
|
|
@@ -45,5 +45,6 @@ export declare class FeaturevisorSDK {
|
|
|
45
45
|
getVariableInteger(featureKey: FeatureKey | Feature, variableKey: string, attributes?: Attributes): number | undefined;
|
|
46
46
|
getVariableDouble(featureKey: FeatureKey | Feature, variableKey: string, attributes?: Attributes): number | undefined;
|
|
47
47
|
getVariableArray(featureKey: FeatureKey | Feature, variableKey: string, attributes?: Attributes): string[] | undefined;
|
|
48
|
+
getVariableObject<T>(featureKey: FeatureKey | Feature, variableKey: string, attributes?: Attributes): T | undefined;
|
|
48
49
|
}
|
|
49
50
|
export {};
|
package/lib/client.js
CHANGED
|
@@ -16,6 +16,8 @@ export function getValueByType(value, fieldType) {
|
|
|
16
16
|
return value === true;
|
|
17
17
|
case "array":
|
|
18
18
|
return Array.isArray(value) ? value : undefined;
|
|
19
|
+
case "object":
|
|
20
|
+
return typeof value === "object" ? value : undefined;
|
|
19
21
|
default:
|
|
20
22
|
return value;
|
|
21
23
|
}
|
|
@@ -199,6 +201,11 @@ var FeaturevisorSDK = /** @class */ (function () {
|
|
|
199
201
|
var variableValue = this.getVariable(featureKey, variableKey, attributes);
|
|
200
202
|
return getValueByType(variableValue, "array");
|
|
201
203
|
};
|
|
204
|
+
FeaturevisorSDK.prototype.getVariableObject = function (featureKey, variableKey, attributes) {
|
|
205
|
+
if (attributes === void 0) { attributes = {}; }
|
|
206
|
+
var variableValue = this.getVariable(featureKey, variableKey, attributes);
|
|
207
|
+
return getValueByType(variableValue, "object");
|
|
208
|
+
};
|
|
202
209
|
return FeaturevisorSDK;
|
|
203
210
|
}());
|
|
204
211
|
export { FeaturevisorSDK };
|
package/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/lib/feature.js
CHANGED
|
@@ -81,9 +81,9 @@ export function getBucketedVariableValue(feature, variableKey, attributes, bucke
|
|
|
81
81
|
}
|
|
82
82
|
// single variable
|
|
83
83
|
var variableSchema = variablesSchema.find(function (v) {
|
|
84
|
-
v.key === variableKey;
|
|
84
|
+
return v.key === variableKey;
|
|
85
85
|
});
|
|
86
|
-
if (variableSchema) {
|
|
86
|
+
if (!variableSchema) {
|
|
87
87
|
return undefined;
|
|
88
88
|
}
|
|
89
89
|
var variation = getBucketedVariation(feature, attributes, bucketValue, datafileReader);
|
|
@@ -94,7 +94,7 @@ export function getBucketedVariableValue(feature, variableKey, attributes, bucke
|
|
|
94
94
|
return v.key === variableKey;
|
|
95
95
|
});
|
|
96
96
|
if (!variableFromVariation) {
|
|
97
|
-
return
|
|
97
|
+
return variableSchema.defaultValue;
|
|
98
98
|
}
|
|
99
99
|
if (variableFromVariation.overrides) {
|
|
100
100
|
var override = variableFromVariation.overrides.find(function (o) {
|
package/lib/feature.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature.js","sourceRoot":"","sources":["../src/feature.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"feature.js","sourceRoot":"","sources":["../src/feature.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@featurevisor/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Featurevisor SDK for Node.js and the browser",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "lib/index.js",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
},
|
|
43
43
|
"license": "MIT",
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@featurevisor/types": "^0.
|
|
45
|
+
"@featurevisor/types": "^0.3.0",
|
|
46
46
|
"murmurhash": "^2.0.1"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "fae6cbf61f8b2f7e89b4faf660f63b37676bab29"
|
|
49
49
|
}
|
package/src/client.ts
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
BucketKey,
|
|
8
8
|
BucketValue,
|
|
9
9
|
FeatureKey,
|
|
10
|
+
VariableObjectValue,
|
|
10
11
|
} from "@featurevisor/types";
|
|
11
12
|
import { DatafileReader } from "./datafileReader";
|
|
12
13
|
import {
|
|
@@ -32,8 +33,8 @@ export interface SdkOptions {
|
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
// union of VariableValue and VariationValue
|
|
35
|
-
type FieldType = "string" | "integer" | "double" | "boolean" | "array";
|
|
36
|
-
type ValueType =
|
|
36
|
+
type FieldType = "string" | "integer" | "double" | "boolean" | "array" | "object";
|
|
37
|
+
type ValueType = VariableValue;
|
|
37
38
|
|
|
38
39
|
export function getValueByType(value: ValueType, fieldType: FieldType): ValueType {
|
|
39
40
|
if (value === undefined) {
|
|
@@ -51,6 +52,8 @@ export function getValueByType(value: ValueType, fieldType: FieldType): ValueTyp
|
|
|
51
52
|
return value === true;
|
|
52
53
|
case "array":
|
|
53
54
|
return Array.isArray(value) ? value : undefined;
|
|
55
|
+
case "object":
|
|
56
|
+
return typeof value === "object" ? value : undefined;
|
|
54
57
|
default:
|
|
55
58
|
return value;
|
|
56
59
|
}
|
|
@@ -335,4 +338,14 @@ export class FeaturevisorSDK {
|
|
|
335
338
|
|
|
336
339
|
return getValueByType(variableValue, "array") as string[] | undefined;
|
|
337
340
|
}
|
|
341
|
+
|
|
342
|
+
getVariableObject<T>(
|
|
343
|
+
featureKey: FeatureKey | Feature,
|
|
344
|
+
variableKey: string,
|
|
345
|
+
attributes: Attributes = {},
|
|
346
|
+
): T | undefined {
|
|
347
|
+
const variableValue = this.getVariable(featureKey, variableKey, attributes);
|
|
348
|
+
|
|
349
|
+
return getValueByType(variableValue, "object") as T | undefined;
|
|
350
|
+
}
|
|
338
351
|
}
|
package/src/feature.ts
CHANGED
|
@@ -161,10 +161,10 @@ export function getBucketedVariableValue(
|
|
|
161
161
|
|
|
162
162
|
// single variable
|
|
163
163
|
const variableSchema = variablesSchema.find((v) => {
|
|
164
|
-
v.key === variableKey;
|
|
164
|
+
return v.key === variableKey;
|
|
165
165
|
});
|
|
166
166
|
|
|
167
|
-
if (variableSchema) {
|
|
167
|
+
if (!variableSchema) {
|
|
168
168
|
return undefined;
|
|
169
169
|
}
|
|
170
170
|
|
|
@@ -179,7 +179,7 @@ export function getBucketedVariableValue(
|
|
|
179
179
|
});
|
|
180
180
|
|
|
181
181
|
if (!variableFromVariation) {
|
|
182
|
-
return
|
|
182
|
+
return variableSchema.defaultValue;
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
if (variableFromVariation.overrides) {
|