New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@featurevisor/sdk

Package Overview
Dependencies
Maintainers
1
Versions
114
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@featurevisor/sdk - npm Package Compare versions

Comparing version 1.28.0 to 1.29.1

11

CHANGELOG.md

@@ -6,2 +6,13 @@ # Change Log

## [1.29.1](https://github.com/featurevisor/featurevisor/compare/v1.29.0...v1.29.1) (2025-01-23)
### Bug Fixes
* convert to datafile schema v2 internally ([#337](https://github.com/featurevisor/featurevisor/issues/337)) ([3441369](https://github.com/featurevisor/featurevisor/commit/3441369a2c237fbef2acdf8acd219cda6c4eb923))
# [1.28.0](https://github.com/featurevisor/featurevisor/compare/v1.27.6...v1.28.0) (2025-01-21)

@@ -8,0 +19,0 @@

3

dist/datafileReader.d.ts

@@ -9,5 +9,2 @@ import { Feature, Segment, DatafileContentV1, DatafileContentV2, Attribute, AttributeKey, SegmentKey, FeatureKey } from "@featurevisor/types";

private features;
private attributesV2;
private segmentsV2;
private featuresV2;
constructor(datafileJson: DatafileContentV1 | DatafileContentV2);

@@ -14,0 +11,0 @@ getRevision(): string;

@@ -1,2 +0,2 @@

!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,(()=>(()=>{var e={393:(e,t,r)=>{"use strict";r.r(t),r.d(t,{compare:()=>n,compareVersions:()=>i,satisfies:()=>o,validate:()=>a});const i=(e,t)=>{const r=u(e),i=u(t),a=r.pop(),n=i.pop(),o=d(r,i);return 0!==o?o:a&&n?d(a.split("."),n.split(".")):a||n?a?-1:1:0},a=e=>"string"==typeof e&&/^[v\d]/.test(e)&&s.test(e),n=(e,t,r)=>{v(r);const a=i(e,t);return h[r].includes(a)},o=(e,t)=>{if(t.includes("||"))return t.split("||").some((t=>o(e,t)));if(t.includes(" "))return t.trim().replace(/\s{2,}/g," ").split(" ").every((t=>o(e,t)));const r=t.match(/^([<>=~^]+)/),i=r?r[1]:"=";if("^"!==i&&"~"!==i)return n(e,t,i);const[a,s,l,,f]=u(e),[c,h,g,,v]=u(t),y=[a,s,l],b=[c,null!=h?h:"x",null!=g?g:"x"];if(v){if(!f)return!1;if(0!==d(y,b))return!1;if(-1===d(f.split("."),v.split(".")))return!1}const p=b.findIndex((e=>"0"!==e))+1,m="~"===i?2:p>1?p:1;return 0===d(y.slice(0,m),b.slice(0,m))&&-1!==d(y.slice(m),b.slice(m))},s=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,u=e=>{if("string"!=typeof e)throw new TypeError("Invalid argument expected string");const t=e.match(s);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},l=e=>"*"===e||"x"===e||"X"===e,f=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},c=(e,t)=>{if(l(e)||l(t))return 0;const[r,i]=((e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t])(f(e),f(t));return r>i?1:r<i?-1:0},d=(e,t)=>{for(let r=0;r<Math.max(e.length,t.length);r++){const i=c(e[r]||"0",t[r]||"0");if(0!==i)return i}return 0},h={">":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1]},g=Object.keys(h),v=e=>{if("string"!=typeof e)throw new TypeError("Invalid operator type, expected string but got "+typeof e);if(-1===g.indexOf(e))throw new Error(`Invalid operator, expected one of ${g.join("|")}`)}},784:e=>{!function(){const t=e=>(new TextEncoder).encode(e);function r(e,r){let i,a,n,o,s,u,l,f;for("string"==typeof e&&(e=t(e)),i=3&e.length,a=e.length-i,n=r,s=3432918353,u=461845907,f=0;f<a;)l=255&e[f]|(255&e[++f])<<8|(255&e[++f])<<16|(255&e[++f])<<24,++f,l=(65535&l)*s+(((l>>>16)*s&65535)<<16)&4294967295,l=l<<15|l>>>17,l=(65535&l)*u+(((l>>>16)*u&65535)<<16)&4294967295,n^=l,n=n<<13|n>>>19,o=5*(65535&n)+((5*(n>>>16)&65535)<<16)&4294967295,n=27492+(65535&o)+((58964+(o>>>16)&65535)<<16);switch(l=0,i){case 3:l^=(255&e[f+2])<<16;case 2:l^=(255&e[f+1])<<8;case 1:l^=255&e[f],l=(65535&l)*s+(((l>>>16)*s&65535)<<16)&4294967295,l=l<<15|l>>>17,l=(65535&l)*u+(((l>>>16)*u&65535)<<16)&4294967295,n^=l}return n^=e.length,n^=n>>>16,n=2246822507*(65535&n)+((2246822507*(n>>>16)&65535)<<16)&4294967295,n^=n>>>13,n=3266489909*(65535&n)+((3266489909*(n>>>16)&65535)<<16)&4294967295,n^=n>>>16,n>>>0}const i=r;i.v2=function(e,r){"string"==typeof e&&(e=t(e));let i,a=e.length,n=r^a,o=0;for(;a>=4;)i=255&e[o]|(255&e[++o])<<8|(255&e[++o])<<16|(255&e[++o])<<24,i=1540483477*(65535&i)+((1540483477*(i>>>16)&65535)<<16),i^=i>>>24,i=1540483477*(65535&i)+((1540483477*(i>>>16)&65535)<<16),n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16)^i,a-=4,++o;switch(a){case 3:n^=(255&e[o+2])<<16;case 2:n^=(255&e[o+1])<<8;case 1:n^=255&e[o],n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16)}return n^=n>>>13,n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16),n^=n>>>15,n>>>0},i.v3=r,e.exports=i}()},906:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MAX_BUCKETED_NUMBER=void 0,t.getBucketedNumber=function(e){var r=i.v3(e,a)/n;return Math.floor(r*t.MAX_BUCKETED_NUMBER)};var i=r(784),a=1,n=Math.pow(2,32);t.MAX_BUCKETED_NUMBER=1e5},186:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.conditionIsMatched=a,t.allConditionsAreMatched=function e(t,r,i){if("attribute"in t)try{return a(t,r)}catch(e){return i.warn(e.message,{error:e,details:{condition:t,context:r}}),!1}return"and"in t&&Array.isArray(t.and)?t.and.every((function(t){return e(t,r,i)})):"or"in t&&Array.isArray(t.or)?t.or.some((function(t){return e(t,r,i)})):"not"in t&&Array.isArray(t.not)?t.not.every((function(){return!1===e({and:t.not},r,i)})):!!Array.isArray(t)&&t.every((function(t){return e(t,r,i)}))};var i=r(393);function a(e,t){var r=e.attribute,a=e.operator,n=e.value;if("equals"===a)return t[r]===n;if("notEquals"===a)return t[r]!==n;if("before"===a||"after"===a){var o=(u=t[r])instanceof Date?u:new Date(u),s=n instanceof Date?n:new Date(n);return"before"===a?o<s:o>s}if(!Array.isArray(n)||-1===["string","number"].indexOf(typeof t[r])&&null!==t[r]){if("string"==typeof t[r]&&"string"==typeof n){if(u=t[r],"contains"===a)return-1!==u.indexOf(n);if("notContains"===a)return-1===u.indexOf(n);if("startsWith"===a)return u.startsWith(n);if("endsWith"===a)return u.endsWith(n);if("semverEquals"===a)return 0===(0,i.compareVersions)(u,n);if("semverNotEquals"===a)return 0!==(0,i.compareVersions)(u,n);if("semverGreaterThan"===a)return 1===(0,i.compareVersions)(u,n);if("semverGreaterThanOrEquals"===a)return(0,i.compareVersions)(u,n)>=0;if("semverLessThan"===a)return-1===(0,i.compareVersions)(u,n);if("semverLessThanOrEquals"===a)return(0,i.compareVersions)(u,n)<=0}else if("number"==typeof t[r]&&"number"==typeof n){if(u=t[r],"greaterThan"===a)return u>n;if("greaterThanOrEquals"===a)return u>=n;if("lessThan"===a)return u<n;if("lessThanOrEquals"===a)return u<=n}}else{var u=t[r];if("in"===a)return-1!==n.indexOf(u);if("notIn"===a)return-1===n.indexOf(u)}return!1}},649:(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=void 0,t.parseJsonConditionsIfStringified=r;var i=function(){function e(e){if(this.schemaVersion=e.schemaVersion,this.revision=e.revision,"2"===this.schemaVersion){var t=e;this.attributesV2=t.attributes,this.segmentsV2=t.segments,this.featuresV2=t.features}else{var r=e;this.segments=r.segments,this.attributes=r.attributes,this.features=r.features}}return e.prototype.getRevision=function(){return this.revision},e.prototype.getSchemaVersion=function(){return this.schemaVersion},e.prototype.getAllAttributes=function(){if("2"!==this.schemaVersion)return this.attributes;var e=[];for(var t in this.attributesV2)e.push(this.attributesV2[t]);return e},e.prototype.getAttribute=function(e){return"2"===this.schemaVersion?this.attributesV2[e]:this.attributes.find((function(t){return t.key===e}))},e.prototype.getSegment=function(e){var t="2"===this.schemaVersion?this.segmentsV2[e]:this.segments.find((function(t){return t.key===e}));if(t)return r(t,"conditions")},e.prototype.getFeature=function(e){var t="2"===this.schemaVersion?this.featuresV2[e]:this.features.find((function(t){return t.key===e}));if(t)return t},e}();t.DatafileReader=i},40:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Emitter=void 0;var r=function(){function e(){this._listeners={}}return e.prototype.addListener=function(e,t){void 0===this._listeners[e]&&(this._listeners[e]=[]),this._listeners[e].push(t)},e.prototype.removeListener=function(e,t){if(void 0!==this._listeners[e]){var r=this._listeners[e].indexOf(t);-1!==r&&this._listeners[e].splice(r,1)}},e.prototype.removeAllListeners=function(e){var t=this;e?this._listeners[e]=[]:Object.keys(this._listeners).forEach((function(e){t._listeners[e]=[]}))},e.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];void 0!==this._listeners[e]&&this._listeners[e].forEach((function(e){e.apply(void 0,t)}))},e}();t.Emitter=r},512:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getMatchedAllocation=n,t.parseFromStringifiedSegments=o,t.getMatchedTraffic=function(e,t,r,a){return e.find((function(e){return!!(0,i.allGroupSegmentsAreMatched)(o(e.segments),t,r,a)}))},t.getMatchedTrafficAndAllocation=function(e,t,r,a,s){var u=e.find((function(e){return(0,i.allGroupSegmentsAreMatched)(o(e.segments),t,a,s)}));return u?{matchedTraffic:u,matchedAllocation:n(u,r)}:{matchedTraffic:void 0,matchedAllocation:void 0}},t.findForceFromFeature=function(e,t,r,n){var o={force:void 0,forceIndex:void 0};if(!e.force)return o;for(var s=0;s<e.force.length;s++){var u=e.force[s];if(u.conditions&&(0,a.allConditionsAreMatched)(u.conditions,t,n)){o.force=u,o.forceIndex=s;break}if(u.segments&&(0,i.allGroupSegmentsAreMatched)(u.segments,t,r,n)){o.force=u,o.forceIndex=s;break}}return o};var i=r(826),a=r(186);function n(e,t){for(var r=0,i=e.allocation;r<i.length;r++){var a=i[r],n=a.range,o=n[0],s=n[1];if(a.range&&o<=t&&s>=t)return a}}function o(e){return"string"==typeof e&&(e.startsWith("{")||e.startsWith("["))?JSON.parse(e):e}},166:function(e,t,r){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var a=Object.getOwnPropertyDescriptor(t,r);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,a)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),a=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||i(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),a(r(906),t),a(r(247),t),a(r(584),t),a(r(186),t),a(r(40),t)},247:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FeaturevisorInstance=t.EvaluationReason=void 0,t.getValueByType=h,t.createInstance=function(e){return new g(e)};var i,a=r(584),n=r(649),o=r(40),s=r(906),u=r(512),l=r(186),f=r(826),c={schemaVersion:"1",revision:"unknown",attributes:[],segments:[],features:[]};function d(e,t){return t?t(e):fetch(e).then((function(e){return e.json()}))}function h(e,t){try{if(void 0===e)return;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}}catch(e){return}}!function(e){e.NOT_FOUND="not_found",e.NO_VARIATIONS="no_variations",e.NO_MATCH="no_match",e.DISABLED="disabled",e.REQUIRED="required",e.OUT_OF_RANGE="out_of_range",e.FORCED="forced",e.INITIAL="initial",e.STICKY="sticky",e.RULE="rule",e.ALLOCATED="allocated",e.DEFAULTED="defaulted",e.OVERRIDE="override",e.ERROR="error"}(i||(t.EvaluationReason=i={}));var g=function(){function e(e){var t=this;this.bucketKeySeparator=e.bucketKeySeparator||".",this.configureBucketKey=e.configureBucketKey,this.configureBucketValue=e.configureBucketValue,this.datafileUrl=e.datafileUrl,this.handleDatafileFetch=e.handleDatafileFetch,this.initialFeatures=e.initialFeatures,this.interceptContext=e.interceptContext,this.logger=e.logger||(0,a.createLogger)(),this.refreshInterval=e.refreshInterval,this.stickyFeatures=e.stickyFeatures,this.emitter=new o.Emitter,this.statuses={ready:!1,refreshInProgress:!1},e.onReady&&this.emitter.addListener("ready",e.onReady),e.onRefresh&&this.emitter.addListener("refresh",e.onRefresh),e.onUpdate&&this.emitter.addListener("update",e.onUpdate),e.onActivation&&this.emitter.addListener("activation",e.onActivation);var r=this.emitter.addListener.bind(this.emitter);this.on=r,this.addListener=r;var i=this.emitter.removeListener.bind(this.emitter);if(this.off=i,this.removeListener=i,this.removeAllListeners=this.emitter.removeAllListeners.bind(this.emitter),e.datafileUrl)this.setDatafile(e.datafile||c),d(e.datafileUrl,e.handleDatafileFetch).then((function(e){t.setDatafile(e),t.statuses.ready=!0,t.emitter.emit("ready"),t.refreshInterval&&t.startRefreshing()})).catch((function(e){t.logger.error("failed to fetch datafile",{error:e})}));else{if(!e.datafile)throw new Error("Featurevisor SDK instance cannot be created without both `datafile` and `datafileUrl` options");this.setDatafile(e.datafile),this.statuses.ready=!0,setTimeout((function(){t.emitter.emit("ready")}),0)}}return e.prototype.setLogLevels=function(e){this.logger.setLevels(e)},e.prototype.onReady=function(){var e=this;return new Promise((function(t){if(e.statuses.ready)return t(e);var r=function(){e.emitter.removeListener("ready",r),t(e)};e.emitter.addListener("ready",r)}))},e.prototype.setDatafile=function(e){try{this.datafileReader=new n.DatafileReader("string"==typeof e?JSON.parse(e):e)}catch(e){this.logger.error("could not parse datafile",{error:e})}},e.prototype.setStickyFeatures=function(e){this.stickyFeatures=e},e.prototype.getRevision=function(){return this.datafileReader.getRevision()},e.prototype.getFeature=function(e){return"string"==typeof e?this.datafileReader.getFeature(e):e},e.prototype.getBucketKey=function(e,t){var r,i,a=e.key;if("string"==typeof e.bucketBy)r="plain",i=[e.bucketBy];else if(Array.isArray(e.bucketBy))r="and",i=e.bucketBy;else{if("object"!=typeof e.bucketBy||!Array.isArray(e.bucketBy.or))throw this.logger.error("invalid bucketBy",{featureKey:a,bucketBy:e.bucketBy}),new Error("invalid bucketBy");r="or",i=e.bucketBy.or}var n=[];i.forEach((function(e){var i=t[e];void 0!==i&&("plain"===r||"and"===r||0===n.length)&&n.push(i)})),n.push(a);var o=n.join(this.bucketKeySeparator);return this.configureBucketKey?this.configureBucketKey(e,t,o):o},e.prototype.getBucketValue=function(e,t){var r=this.getBucketKey(e,t),i=(0,s.getBucketedNumber)(r);return this.configureBucketValue?{bucketKey:r,bucketValue:this.configureBucketValue(e,t,i)}:{bucketKey:r,bucketValue:i}},e.prototype.isReady=function(){return this.statuses.ready},e.prototype.refresh=function(){var e=this;return this.logger.debug("refreshing datafile"),this.statuses.refreshInProgress?this.logger.warn("refresh in progress, skipping"):this.datafileUrl?(this.statuses.refreshInProgress=!0,void d(this.datafileUrl,this.handleDatafileFetch).then((function(t){var r=e.getRevision()!==t.revision;e.setDatafile(t),e.logger.info("refreshed datafile"),e.emitter.emit("refresh"),r&&e.emitter.emit("update"),e.statuses.refreshInProgress=!1})).catch((function(t){e.logger.error("failed to refresh datafile",{error:t}),e.statuses.refreshInProgress=!1}))):this.logger.error("cannot refresh since `datafileUrl` is not provided")},e.prototype.startRefreshing=function(){var e=this;return this.datafileUrl?this.intervalId?this.logger.warn("refreshing has already started"):this.refreshInterval?void(this.intervalId=setInterval((function(){e.refresh()}),1e3*this.refreshInterval)):this.logger.warn("no `refreshInterval` option provided"):this.logger.error("cannot start refreshing since `datafileUrl` is not provided")},e.prototype.stopRefreshing=function(){if(!this.intervalId)return this.logger.warn("refreshing has not started yet");clearInterval(this.intervalId)},e.prototype.evaluateFlag=function(e,t){var r,a=this;void 0===t&&(t={});try{var n="string"==typeof e?e:e.key;if(this.stickyFeatures&&this.stickyFeatures[n]&&void 0!==this.stickyFeatures[n].enabled)return r={featureKey:n,reason:i.STICKY,sticky:this.stickyFeatures[n],enabled:this.stickyFeatures[n].enabled},this.logger.debug("using sticky enabled",r),r;if(this.statuses&&!this.statuses.ready&&this.initialFeatures&&this.initialFeatures[n]&&void 0!==this.initialFeatures[n].enabled)return r={featureKey:n,reason:i.INITIAL,initial:this.initialFeatures[n],enabled:this.initialFeatures[n].enabled},this.logger.debug("using initial enabled",r),r;var o=this.getFeature(e);if(!o)return r={featureKey:n,reason:i.NOT_FOUND},this.logger.warn("feature not found",r),r;o.deprecated&&this.logger.warn("feature is deprecated",{featureKey:o.key});var s=this.interceptContext?this.interceptContext(t):t,l=(0,u.findForceFromFeature)(o,t,this.datafileReader,this.logger),f=l.force,c=l.forceIndex;if(f&&void 0!==f.enabled)return r={featureKey:o.key,reason:i.FORCED,forceIndex:c,force:f,enabled:f.enabled},this.logger.debug("forced enabled found",r),r;if(o.required&&o.required.length>0){var d=o.required.every((function(e){var t,r;return"string"==typeof e?t=e:(t=e.key,r=e.variation),!!a.isEnabled(t,s)&&(void 0===r||a.getVariation(t,s)===r)}));if(!d)return r={featureKey:o.key,reason:i.REQUIRED,required:o.required,enabled:d},this.logger.debug("required features not enabled",r),r}var h=this.getBucketValue(o,s),g=h.bucketKey,v=h.bucketValue,y=(0,u.getMatchedTraffic)(o.traffic,s,this.datafileReader,this.logger);if(y){if(o.ranges&&o.ranges.length>0)return o.ranges.find((function(e){return v>=e[0]&&v<e[1]}))?(r={featureKey:o.key,reason:i.ALLOCATED,bucketKey:g,bucketValue:v,ruleKey:y.key,traffic:y,enabled:void 0===y.enabled||y.enabled},this.logger.debug("matched",r),r):(r={featureKey:o.key,reason:i.OUT_OF_RANGE,bucketKey:g,bucketValue:v,enabled:!1},this.logger.debug("not matched",r),r);if(void 0!==y.enabled)return r={featureKey:o.key,reason:i.OVERRIDE,bucketKey:g,bucketValue:v,ruleKey:y.key,traffic:y,enabled:y.enabled},this.logger.debug("override from rule",r),r;if(v<=y.percentage)return r={featureKey:o.key,reason:i.RULE,bucketKey:g,bucketValue:v,ruleKey:y.key,traffic:y,enabled:!0},this.logger.debug("matched traffic",r),r}return r={featureKey:o.key,reason:i.NO_MATCH,bucketKey:g,bucketValue:v,enabled:!1},this.logger.debug("nothing matched",r),r}catch(t){return r={featureKey:"string"==typeof e?e:e.key,reason:i.ERROR,error:t},this.logger.error("error",r),r}},e.prototype.isEnabled=function(e,t){void 0===t&&(t={});try{return!0===this.evaluateFlag(e,t).enabled}catch(t){return this.logger.error("isEnabled",{featureKey:e,error:t}),!1}},e.prototype.evaluateVariation=function(e,t){var r;void 0===t&&(t={});try{var a="string"==typeof e?e:e.key;if(!1===this.evaluateFlag(e,t).enabled)return r={featureKey:a,reason:i.DISABLED},this.logger.debug("feature is disabled",r),r;if(this.stickyFeatures&&this.stickyFeatures[a]&&void 0!==(n=this.stickyFeatures[a].variation))return r={featureKey:a,reason:i.STICKY,variationValue:n},this.logger.debug("using sticky variation",r),r;if(this.statuses&&!this.statuses.ready&&this.initialFeatures&&this.initialFeatures[a]&&void 0!==this.initialFeatures[a].variation){var n=this.initialFeatures[a].variation;return r={featureKey:a,reason:i.INITIAL,variationValue:n},this.logger.debug("using initial variation",r),r}var o=this.getFeature(e);if(!o)return r={featureKey:a,reason:i.NOT_FOUND},this.logger.warn("feature not found",r),r;if(!o.variations||0===o.variations.length)return r={featureKey:a,reason:i.NO_VARIATIONS},this.logger.warn("no variations",r),r;var s=this.interceptContext?this.interceptContext(t):t,l=(0,u.findForceFromFeature)(o,t,this.datafileReader,this.logger),f=l.force,c=l.forceIndex;if(f&&f.variation&&(p=o.variations.find((function(e){return e.value===f.variation}))))return r={featureKey:o.key,reason:i.FORCED,forceIndex:c,force:f,variation:p},this.logger.debug("forced variation found",r),r;var d=this.getBucketValue(o,s),h=d.bucketKey,g=d.bucketValue,v=(0,u.getMatchedTrafficAndAllocation)(o.traffic,s,g,this.datafileReader,this.logger),y=v.matchedTraffic,b=v.matchedAllocation;if(y){var p;if(y.variation&&(p=o.variations.find((function(e){return e.value===y.variation}))))return r={featureKey:o.key,reason:i.RULE,bucketKey:h,bucketValue:g,ruleKey:y.key,traffic:y,variation:p},this.logger.debug("override from rule",r),r;if(b&&b.variation&&(p=o.variations.find((function(e){return e.value===b.variation}))))return r={featureKey:o.key,reason:i.ALLOCATED,bucketKey:h,bucketValue:g,ruleKey:y.key,traffic:y,variation:p},this.logger.debug("allocated variation",r),r}return r={featureKey:o.key,reason:i.NO_MATCH,bucketKey:h,bucketValue:g},this.logger.debug("no matched variation",r),r}catch(t){return r={featureKey:"string"==typeof e?e:e.key,reason:i.ERROR,error:t},this.logger.error("error",r),r}},e.prototype.getVariation=function(e,t){void 0===t&&(t={});try{var r=this.evaluateVariation(e,t);return void 0!==r.variationValue?r.variationValue:r.variation?r.variation.value:void 0}catch(t){return void this.logger.error("getVariation",{featureKey:e,error:t})}},e.prototype.activate=function(e,t){void 0===t&&(t={});try{var r=this.evaluateVariation(e,t),i=r.variation?r.variation.value:r.variationValue;if(void 0===i)return;var a=this.interceptContext?this.interceptContext(t):t,n={};return this.datafileReader.getAllAttributes().filter((function(e){return!0===e.capture})).forEach((function(e){void 0!==a[e.key]&&(n[e.key]=t[e.key])})),this.emitter.emit("activation",e,i,a,n,r),i}catch(t){return void this.logger.error("activate",{featureKey:e,error:t})}},e.prototype.evaluateVariable=function(e,t,r){var a,n=this;void 0===r&&(r={});try{var o,s="string"==typeof e?e:e.key;if(!1===this.evaluateFlag(e,r).enabled)return a={featureKey:s,reason:i.DISABLED},this.logger.debug("feature is disabled",a),a;if(this.stickyFeatures&&this.stickyFeatures[s]&&(o=this.stickyFeatures[s].variables)){var c=o[t];if(void 0!==c)return a={featureKey:s,reason:i.STICKY,variableKey:t,variableValue:c},this.logger.debug("using sticky variable",a),a}if(this.statuses&&!this.statuses.ready&&this.initialFeatures&&this.initialFeatures[s]&&(o=this.initialFeatures[s].variables)&&void 0!==o[t])return a={featureKey:s,reason:i.INITIAL,variableKey:t,variableValue:o[t]},this.logger.debug("using initial variable",a),a;var d=this.getFeature(e);if(!d)return a={featureKey:s,reason:i.NOT_FOUND,variableKey:t},this.logger.warn("feature not found in datafile",a),a;var h=Array.isArray(d.variablesSchema)?d.variablesSchema.find((function(e){return e.key===t})):void 0;if(!h)return a={featureKey:s,reason:i.NOT_FOUND,variableKey:t},this.logger.warn("variable schema not found",a),a;var g=this.interceptContext?this.interceptContext(r):r,v=(0,u.findForceFromFeature)(d,r,this.datafileReader,this.logger),y=v.force,b=v.forceIndex;if(y&&y.variables&&void 0!==y.variables[t])return a={featureKey:d.key,reason:i.FORCED,forceIndex:b,force:y,variableKey:t,variableSchema:h,variableValue:y.variables[t]},this.logger.debug("forced variable",a),a;var p=this.getBucketValue(d,g),m=p.bucketKey,k=p.bucketValue,V=(0,u.getMatchedTrafficAndAllocation)(d.traffic,g,k,this.datafileReader,this.logger),K=V.matchedTraffic,A=V.matchedAllocation;if(K){if(K.variables&&void 0!==K.variables[t])return a={featureKey:d.key,reason:i.RULE,bucketKey:m,bucketValue:k,ruleKey:K.key,traffic:K,variableKey:t,variableSchema:h,variableValue:K.variables[t]},this.logger.debug("override from rule",a),a;var O;if(y&&y.variation?O=y.variation:A&&A.variation&&(O=A.variation),O&&Array.isArray(d.variations)){var F=d.variations.find((function(e){return e.value===O}));if(F&&F.variables){var E=F.variables.find((function(e){return e.key===t}));if(E){if(E.overrides){var I=E.overrides.find((function(e){return e.conditions?(0,l.allConditionsAreMatched)("string"==typeof e.conditions?JSON.parse(e.conditions):e.conditions,g,n.logger):!!e.segments&&(0,f.allGroupSegmentsAreMatched)((0,u.parseFromStringifiedSegments)(e.segments),g,n.datafileReader,n.logger)}));if(I)return a={featureKey:d.key,reason:i.OVERRIDE,bucketKey:m,bucketValue:k,ruleKey:K.key,traffic:K,variableKey:t,variableSchema:h,variableValue:I.value},this.logger.debug("variable override",a),a}if(void 0!==E.value)return a={featureKey:d.key,reason:i.ALLOCATED,bucketKey:m,bucketValue:k,ruleKey:K.key,traffic:K,variableKey:t,variableSchema:h,variableValue:E.value},this.logger.debug("allocated variable",a),a}}}}return a={featureKey:d.key,reason:i.DEFAULTED,bucketKey:m,bucketValue:k,variableKey:t,variableSchema:h,variableValue:h.defaultValue},this.logger.debug("using default value",a),a}catch(r){return a={featureKey:"string"==typeof e?e:e.key,reason:i.ERROR,variableKey:t,error:r},this.logger.error("error",a),a}},e.prototype.getVariable=function(e,t,r){void 0===r&&(r={});try{var i=this.evaluateVariable(e,t,r);return void 0!==i.variableValue?i.variableSchema&&"json"===i.variableSchema.type&&"string"==typeof i.variableValue?JSON.parse(i.variableValue):i.variableValue:void 0}catch(r){return void this.logger.error("getVariable",{featureKey:e,variableKey:t,error:r})}},e.prototype.getVariableBoolean=function(e,t,r){return void 0===r&&(r={}),h(this.getVariable(e,t,r),"boolean")},e.prototype.getVariableString=function(e,t,r){return void 0===r&&(r={}),h(this.getVariable(e,t,r),"string")},e.prototype.getVariableInteger=function(e,t,r){return void 0===r&&(r={}),h(this.getVariable(e,t,r),"integer")},e.prototype.getVariableDouble=function(e,t,r){return void 0===r&&(r={}),h(this.getVariable(e,t,r),"double")},e.prototype.getVariableArray=function(e,t,r){return void 0===r&&(r={}),h(this.getVariable(e,t,r),"array")},e.prototype.getVariableObject=function(e,t,r){return void 0===r&&(r={}),h(this.getVariable(e,t,r),"object")},e.prototype.getVariableJSON=function(e,t,r){return void 0===r&&(r={}),h(this.getVariable(e,t,r),"json")},e}();t.FeaturevisorInstance=g},584:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Logger=t.defaultLogHandler=t.defaultLogLevels=t.loggerPrefix=void 0,t.createLogger=function(e){void 0===e&&(e={});var i=e.levels||t.defaultLogLevels,a=e.handler||t.defaultLogHandler;return new r({levels:i,handler:a})},t.loggerPrefix="[Featurevisor]",t.defaultLogLevels=["warn","error"],t.defaultLogHandler=function(e,r,i){switch(void 0===i&&(i={}),e){case"debug":console.log(t.loggerPrefix,r,i);break;case"info":console.info(t.loggerPrefix,r,i);break;case"warn":console.warn(t.loggerPrefix,r,i);break;case"error":console.error(t.loggerPrefix,r,i)}};var r=function(){function e(e){this.levels=e.levels,this.handle=e.handler}return e.prototype.setLevels=function(e){this.levels=e},e.prototype.log=function(e,t,r){-1!==this.levels.indexOf(e)&&this.handle(e,t,r)},e.prototype.debug=function(e,t){this.log("debug",e,t)},e.prototype.info=function(e,t){this.log("info",e,t)},e.prototype.warn=function(e,t){this.log("warn",e,t)},e.prototype.error=function(e,t){this.log("error",e,t)},e}();t.Logger=r},826:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.segmentIsMatched=a,t.allGroupSegmentsAreMatched=function e(t,r,i,n){if("*"===t)return!0;if("string"==typeof t){var o=i.getSegment(t);return!!o&&a(o,r,n)}if("object"==typeof t){if("and"in t&&Array.isArray(t.and))return t.and.every((function(t){return e(t,r,i,n)}));if("or"in t&&Array.isArray(t.or))return t.or.some((function(t){return e(t,r,i,n)}));if("not"in t&&Array.isArray(t.not))return t.not.every((function(t){return!1===e(t,r,i,n)}))}return!!Array.isArray(t)&&t.every((function(t){return e(t,r,i,n)}))};var i=r(186);function a(e,t,r){return(0,i.allConditionsAreMatched)(e.conditions,t,r)}}},t={};function r(i){var a=t[i];if(void 0!==a)return a.exports;var n=t[i]={exports:{}};return e[i].call(n.exports,n,n.exports,r),n.exports}return r.d=(e,t)=>{for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r(166)})()));
!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,(()=>(()=>{var e={393:(e,t,r)=>{"use strict";r.r(t),r.d(t,{compare:()=>n,compareVersions:()=>i,satisfies:()=>o,validate:()=>a});const i=(e,t)=>{const r=u(e),i=u(t),a=r.pop(),n=i.pop(),o=d(r,i);return 0!==o?o:a&&n?d(a.split("."),n.split(".")):a||n?a?-1:1:0},a=e=>"string"==typeof e&&/^[v\d]/.test(e)&&s.test(e),n=(e,t,r)=>{v(r);const a=i(e,t);return h[r].includes(a)},o=(e,t)=>{if(t.includes("||"))return t.split("||").some((t=>o(e,t)));if(t.includes(" "))return t.trim().replace(/\s{2,}/g," ").split(" ").every((t=>o(e,t)));const r=t.match(/^([<>=~^]+)/),i=r?r[1]:"=";if("^"!==i&&"~"!==i)return n(e,t,i);const[a,s,l,,f]=u(e),[c,h,g,,v]=u(t),y=[a,s,l],b=[c,null!=h?h:"x",null!=g?g:"x"];if(v){if(!f)return!1;if(0!==d(y,b))return!1;if(-1===d(f.split("."),v.split(".")))return!1}const p=b.findIndex((e=>"0"!==e))+1,m="~"===i?2:p>1?p:1;return 0===d(y.slice(0,m),b.slice(0,m))&&-1!==d(y.slice(m),b.slice(m))},s=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,u=e=>{if("string"!=typeof e)throw new TypeError("Invalid argument expected string");const t=e.match(s);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},l=e=>"*"===e||"x"===e||"X"===e,f=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},c=(e,t)=>{if(l(e)||l(t))return 0;const[r,i]=((e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t])(f(e),f(t));return r>i?1:r<i?-1:0},d=(e,t)=>{for(let r=0;r<Math.max(e.length,t.length);r++){const i=c(e[r]||"0",t[r]||"0");if(0!==i)return i}return 0},h={">":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1]},g=Object.keys(h),v=e=>{if("string"!=typeof e)throw new TypeError("Invalid operator type, expected string but got "+typeof e);if(-1===g.indexOf(e))throw new Error(`Invalid operator, expected one of ${g.join("|")}`)}},784:e=>{!function(){const t=e=>(new TextEncoder).encode(e);function r(e,r){let i,a,n,o,s,u,l,f;for("string"==typeof e&&(e=t(e)),i=3&e.length,a=e.length-i,n=r,s=3432918353,u=461845907,f=0;f<a;)l=255&e[f]|(255&e[++f])<<8|(255&e[++f])<<16|(255&e[++f])<<24,++f,l=(65535&l)*s+(((l>>>16)*s&65535)<<16)&4294967295,l=l<<15|l>>>17,l=(65535&l)*u+(((l>>>16)*u&65535)<<16)&4294967295,n^=l,n=n<<13|n>>>19,o=5*(65535&n)+((5*(n>>>16)&65535)<<16)&4294967295,n=27492+(65535&o)+((58964+(o>>>16)&65535)<<16);switch(l=0,i){case 3:l^=(255&e[f+2])<<16;case 2:l^=(255&e[f+1])<<8;case 1:l^=255&e[f],l=(65535&l)*s+(((l>>>16)*s&65535)<<16)&4294967295,l=l<<15|l>>>17,l=(65535&l)*u+(((l>>>16)*u&65535)<<16)&4294967295,n^=l}return n^=e.length,n^=n>>>16,n=2246822507*(65535&n)+((2246822507*(n>>>16)&65535)<<16)&4294967295,n^=n>>>13,n=3266489909*(65535&n)+((3266489909*(n>>>16)&65535)<<16)&4294967295,n^=n>>>16,n>>>0}const i=r;i.v2=function(e,r){"string"==typeof e&&(e=t(e));let i,a=e.length,n=r^a,o=0;for(;a>=4;)i=255&e[o]|(255&e[++o])<<8|(255&e[++o])<<16|(255&e[++o])<<24,i=1540483477*(65535&i)+((1540483477*(i>>>16)&65535)<<16),i^=i>>>24,i=1540483477*(65535&i)+((1540483477*(i>>>16)&65535)<<16),n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16)^i,a-=4,++o;switch(a){case 3:n^=(255&e[o+2])<<16;case 2:n^=(255&e[o+1])<<8;case 1:n^=255&e[o],n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16)}return n^=n>>>13,n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16),n^=n>>>15,n>>>0},i.v3=r,e.exports=i}()},906:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MAX_BUCKETED_NUMBER=void 0,t.getBucketedNumber=function(e){var r=i.v3(e,a)/n;return Math.floor(r*t.MAX_BUCKETED_NUMBER)};var i=r(784),a=1,n=Math.pow(2,32);t.MAX_BUCKETED_NUMBER=1e5},186:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.conditionIsMatched=a,t.allConditionsAreMatched=function e(t,r,i){if("attribute"in t)try{return a(t,r)}catch(e){return i.warn(e.message,{error:e,details:{condition:t,context:r}}),!1}return"and"in t&&Array.isArray(t.and)?t.and.every((function(t){return e(t,r,i)})):"or"in t&&Array.isArray(t.or)?t.or.some((function(t){return e(t,r,i)})):"not"in t&&Array.isArray(t.not)?t.not.every((function(){return!1===e({and:t.not},r,i)})):!!Array.isArray(t)&&t.every((function(t){return e(t,r,i)}))};var i=r(393);function a(e,t){var r=e.attribute,a=e.operator,n=e.value;if("equals"===a)return t[r]===n;if("notEquals"===a)return t[r]!==n;if("before"===a||"after"===a){var o=(u=t[r])instanceof Date?u:new Date(u),s=n instanceof Date?n:new Date(n);return"before"===a?o<s:o>s}if(!Array.isArray(n)||-1===["string","number"].indexOf(typeof t[r])&&null!==t[r]){if("string"==typeof t[r]&&"string"==typeof n){if(u=t[r],"contains"===a)return-1!==u.indexOf(n);if("notContains"===a)return-1===u.indexOf(n);if("startsWith"===a)return u.startsWith(n);if("endsWith"===a)return u.endsWith(n);if("semverEquals"===a)return 0===(0,i.compareVersions)(u,n);if("semverNotEquals"===a)return 0!==(0,i.compareVersions)(u,n);if("semverGreaterThan"===a)return 1===(0,i.compareVersions)(u,n);if("semverGreaterThanOrEquals"===a)return(0,i.compareVersions)(u,n)>=0;if("semverLessThan"===a)return-1===(0,i.compareVersions)(u,n);if("semverLessThanOrEquals"===a)return(0,i.compareVersions)(u,n)<=0}else if("number"==typeof t[r]&&"number"==typeof n){if(u=t[r],"greaterThan"===a)return u>n;if("greaterThanOrEquals"===a)return u>=n;if("lessThan"===a)return u<n;if("lessThanOrEquals"===a)return u<=n}}else{var u=t[r];if("in"===a)return-1!==n.indexOf(u);if("notIn"===a)return-1===n.indexOf(u)}return!1}},649:(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=void 0,t.parseJsonConditionsIfStringified=r;var i=function(){function e(e){var t=this;if(this.schemaVersion=e.schemaVersion,this.revision=e.revision,"2"===this.schemaVersion){var r=e;this.attributes=r.attributes,this.segments=r.segments,this.features=r.features}else{var i=e;this.attributes={},i.attributes.forEach((function(e){t.attributes[e.key]=e})),this.segments={},i.segments.forEach((function(e){t.segments[e.key]=e})),this.features={},i.features.forEach((function(e){t.features[e.key]=e}))}}return e.prototype.getRevision=function(){return this.revision},e.prototype.getSchemaVersion=function(){return this.schemaVersion},e.prototype.getAllAttributes=function(){var e=this,t=[];return Object.keys(this.attributes).forEach((function(r){t.push(e.attributes[r])})),t},e.prototype.getAttribute=function(e){return this.attributes[e]},e.prototype.getSegment=function(e){var t=this.segments[e];if(t)return r(t,"conditions")},e.prototype.getFeature=function(e){return this.features[e]},e}();t.DatafileReader=i},40:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Emitter=void 0;var r=function(){function e(){this._listeners={}}return e.prototype.addListener=function(e,t){void 0===this._listeners[e]&&(this._listeners[e]=[]),this._listeners[e].push(t)},e.prototype.removeListener=function(e,t){if(void 0!==this._listeners[e]){var r=this._listeners[e].indexOf(t);-1!==r&&this._listeners[e].splice(r,1)}},e.prototype.removeAllListeners=function(e){var t=this;e?this._listeners[e]=[]:Object.keys(this._listeners).forEach((function(e){t._listeners[e]=[]}))},e.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];void 0!==this._listeners[e]&&this._listeners[e].forEach((function(e){e.apply(void 0,t)}))},e}();t.Emitter=r},512:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getMatchedAllocation=n,t.parseFromStringifiedSegments=o,t.getMatchedTraffic=function(e,t,r,a){return e.find((function(e){return!!(0,i.allGroupSegmentsAreMatched)(o(e.segments),t,r,a)}))},t.getMatchedTrafficAndAllocation=function(e,t,r,a,s){var u=e.find((function(e){return(0,i.allGroupSegmentsAreMatched)(o(e.segments),t,a,s)}));return u?{matchedTraffic:u,matchedAllocation:n(u,r)}:{matchedTraffic:void 0,matchedAllocation:void 0}},t.findForceFromFeature=function(e,t,r,n){var o={force:void 0,forceIndex:void 0};if(!e.force)return o;for(var s=0;s<e.force.length;s++){var u=e.force[s];if(u.conditions&&(0,a.allConditionsAreMatched)(u.conditions,t,n)){o.force=u,o.forceIndex=s;break}if(u.segments&&(0,i.allGroupSegmentsAreMatched)(u.segments,t,r,n)){o.force=u,o.forceIndex=s;break}}return o};var i=r(826),a=r(186);function n(e,t){for(var r=0,i=e.allocation;r<i.length;r++){var a=i[r],n=a.range,o=n[0],s=n[1];if(a.range&&o<=t&&s>=t)return a}}function o(e){return"string"==typeof e&&(e.startsWith("{")||e.startsWith("["))?JSON.parse(e):e}},166:function(e,t,r){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var a=Object.getOwnPropertyDescriptor(t,r);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,a)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),a=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||i(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),a(r(906),t),a(r(247),t),a(r(584),t),a(r(186),t),a(r(40),t)},247:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FeaturevisorInstance=t.EvaluationReason=void 0,t.getValueByType=h,t.createInstance=function(e){return new g(e)};var i,a=r(584),n=r(649),o=r(40),s=r(906),u=r(512),l=r(186),f=r(826),c={schemaVersion:"1",revision:"unknown",attributes:[],segments:[],features:[]};function d(e,t){return t?t(e):fetch(e).then((function(e){return e.json()}))}function h(e,t){try{if(void 0===e)return;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}}catch(e){return}}!function(e){e.NOT_FOUND="not_found",e.NO_VARIATIONS="no_variations",e.NO_MATCH="no_match",e.DISABLED="disabled",e.REQUIRED="required",e.OUT_OF_RANGE="out_of_range",e.FORCED="forced",e.INITIAL="initial",e.STICKY="sticky",e.RULE="rule",e.ALLOCATED="allocated",e.DEFAULTED="defaulted",e.OVERRIDE="override",e.ERROR="error"}(i||(t.EvaluationReason=i={}));var g=function(){function e(e){var t=this;this.bucketKeySeparator=e.bucketKeySeparator||".",this.configureBucketKey=e.configureBucketKey,this.configureBucketValue=e.configureBucketValue,this.datafileUrl=e.datafileUrl,this.handleDatafileFetch=e.handleDatafileFetch,this.initialFeatures=e.initialFeatures,this.interceptContext=e.interceptContext,this.logger=e.logger||(0,a.createLogger)(),this.refreshInterval=e.refreshInterval,this.stickyFeatures=e.stickyFeatures,this.emitter=new o.Emitter,this.statuses={ready:!1,refreshInProgress:!1},e.onReady&&this.emitter.addListener("ready",e.onReady),e.onRefresh&&this.emitter.addListener("refresh",e.onRefresh),e.onUpdate&&this.emitter.addListener("update",e.onUpdate),e.onActivation&&this.emitter.addListener("activation",e.onActivation);var r=this.emitter.addListener.bind(this.emitter);this.on=r,this.addListener=r;var i=this.emitter.removeListener.bind(this.emitter);if(this.off=i,this.removeListener=i,this.removeAllListeners=this.emitter.removeAllListeners.bind(this.emitter),e.datafileUrl)this.setDatafile(e.datafile||c),d(e.datafileUrl,e.handleDatafileFetch).then((function(e){t.setDatafile(e),t.statuses.ready=!0,t.emitter.emit("ready"),t.refreshInterval&&t.startRefreshing()})).catch((function(e){t.logger.error("failed to fetch datafile",{error:e})}));else{if(!e.datafile)throw new Error("Featurevisor SDK instance cannot be created without both `datafile` and `datafileUrl` options");this.setDatafile(e.datafile),this.statuses.ready=!0,setTimeout((function(){t.emitter.emit("ready")}),0)}}return e.prototype.setLogLevels=function(e){this.logger.setLevels(e)},e.prototype.onReady=function(){var e=this;return new Promise((function(t){if(e.statuses.ready)return t(e);var r=function(){e.emitter.removeListener("ready",r),t(e)};e.emitter.addListener("ready",r)}))},e.prototype.setDatafile=function(e){try{this.datafileReader=new n.DatafileReader("string"==typeof e?JSON.parse(e):e)}catch(e){this.logger.error("could not parse datafile",{error:e})}},e.prototype.setStickyFeatures=function(e){this.stickyFeatures=e},e.prototype.getRevision=function(){return this.datafileReader.getRevision()},e.prototype.getFeature=function(e){return"string"==typeof e?this.datafileReader.getFeature(e):e},e.prototype.getBucketKey=function(e,t){var r,i,a=e.key;if("string"==typeof e.bucketBy)r="plain",i=[e.bucketBy];else if(Array.isArray(e.bucketBy))r="and",i=e.bucketBy;else{if("object"!=typeof e.bucketBy||!Array.isArray(e.bucketBy.or))throw this.logger.error("invalid bucketBy",{featureKey:a,bucketBy:e.bucketBy}),new Error("invalid bucketBy");r="or",i=e.bucketBy.or}var n=[];i.forEach((function(e){var i=t[e];void 0!==i&&("plain"===r||"and"===r||0===n.length)&&n.push(i)})),n.push(a);var o=n.join(this.bucketKeySeparator);return this.configureBucketKey?this.configureBucketKey(e,t,o):o},e.prototype.getBucketValue=function(e,t){var r=this.getBucketKey(e,t),i=(0,s.getBucketedNumber)(r);return this.configureBucketValue?{bucketKey:r,bucketValue:this.configureBucketValue(e,t,i)}:{bucketKey:r,bucketValue:i}},e.prototype.isReady=function(){return this.statuses.ready},e.prototype.refresh=function(){var e=this;return this.logger.debug("refreshing datafile"),this.statuses.refreshInProgress?this.logger.warn("refresh in progress, skipping"):this.datafileUrl?(this.statuses.refreshInProgress=!0,void d(this.datafileUrl,this.handleDatafileFetch).then((function(t){var r=e.getRevision()!==t.revision;e.setDatafile(t),e.logger.info("refreshed datafile"),e.emitter.emit("refresh"),r&&e.emitter.emit("update"),e.statuses.refreshInProgress=!1})).catch((function(t){e.logger.error("failed to refresh datafile",{error:t}),e.statuses.refreshInProgress=!1}))):this.logger.error("cannot refresh since `datafileUrl` is not provided")},e.prototype.startRefreshing=function(){var e=this;return this.datafileUrl?this.intervalId?this.logger.warn("refreshing has already started"):this.refreshInterval?void(this.intervalId=setInterval((function(){e.refresh()}),1e3*this.refreshInterval)):this.logger.warn("no `refreshInterval` option provided"):this.logger.error("cannot start refreshing since `datafileUrl` is not provided")},e.prototype.stopRefreshing=function(){if(!this.intervalId)return this.logger.warn("refreshing has not started yet");clearInterval(this.intervalId)},e.prototype.evaluateFlag=function(e,t){var r,a=this;void 0===t&&(t={});try{var n="string"==typeof e?e:e.key;if(this.stickyFeatures&&this.stickyFeatures[n]&&void 0!==this.stickyFeatures[n].enabled)return r={featureKey:n,reason:i.STICKY,sticky:this.stickyFeatures[n],enabled:this.stickyFeatures[n].enabled},this.logger.debug("using sticky enabled",r),r;if(this.statuses&&!this.statuses.ready&&this.initialFeatures&&this.initialFeatures[n]&&void 0!==this.initialFeatures[n].enabled)return r={featureKey:n,reason:i.INITIAL,initial:this.initialFeatures[n],enabled:this.initialFeatures[n].enabled},this.logger.debug("using initial enabled",r),r;var o=this.getFeature(e);if(!o)return r={featureKey:n,reason:i.NOT_FOUND},this.logger.warn("feature not found",r),r;o.deprecated&&this.logger.warn("feature is deprecated",{featureKey:o.key});var s=this.interceptContext?this.interceptContext(t):t,l=(0,u.findForceFromFeature)(o,t,this.datafileReader,this.logger),f=l.force,c=l.forceIndex;if(f&&void 0!==f.enabled)return r={featureKey:o.key,reason:i.FORCED,forceIndex:c,force:f,enabled:f.enabled},this.logger.debug("forced enabled found",r),r;if(o.required&&o.required.length>0){var d=o.required.every((function(e){var t,r;return"string"==typeof e?t=e:(t=e.key,r=e.variation),!!a.isEnabled(t,s)&&(void 0===r||a.getVariation(t,s)===r)}));if(!d)return r={featureKey:o.key,reason:i.REQUIRED,required:o.required,enabled:d},this.logger.debug("required features not enabled",r),r}var h=this.getBucketValue(o,s),g=h.bucketKey,v=h.bucketValue,y=(0,u.getMatchedTraffic)(o.traffic,s,this.datafileReader,this.logger);if(y){if(o.ranges&&o.ranges.length>0)return o.ranges.find((function(e){return v>=e[0]&&v<e[1]}))?(r={featureKey:o.key,reason:i.ALLOCATED,bucketKey:g,bucketValue:v,ruleKey:y.key,traffic:y,enabled:void 0===y.enabled||y.enabled},this.logger.debug("matched",r),r):(r={featureKey:o.key,reason:i.OUT_OF_RANGE,bucketKey:g,bucketValue:v,enabled:!1},this.logger.debug("not matched",r),r);if(void 0!==y.enabled)return r={featureKey:o.key,reason:i.OVERRIDE,bucketKey:g,bucketValue:v,ruleKey:y.key,traffic:y,enabled:y.enabled},this.logger.debug("override from rule",r),r;if(v<=y.percentage)return r={featureKey:o.key,reason:i.RULE,bucketKey:g,bucketValue:v,ruleKey:y.key,traffic:y,enabled:!0},this.logger.debug("matched traffic",r),r}return r={featureKey:o.key,reason:i.NO_MATCH,bucketKey:g,bucketValue:v,enabled:!1},this.logger.debug("nothing matched",r),r}catch(t){return r={featureKey:"string"==typeof e?e:e.key,reason:i.ERROR,error:t},this.logger.error("error",r),r}},e.prototype.isEnabled=function(e,t){void 0===t&&(t={});try{return!0===this.evaluateFlag(e,t).enabled}catch(t){return this.logger.error("isEnabled",{featureKey:e,error:t}),!1}},e.prototype.evaluateVariation=function(e,t){var r;void 0===t&&(t={});try{var a="string"==typeof e?e:e.key;if(!1===this.evaluateFlag(e,t).enabled)return r={featureKey:a,reason:i.DISABLED},this.logger.debug("feature is disabled",r),r;if(this.stickyFeatures&&this.stickyFeatures[a]&&void 0!==(n=this.stickyFeatures[a].variation))return r={featureKey:a,reason:i.STICKY,variationValue:n},this.logger.debug("using sticky variation",r),r;if(this.statuses&&!this.statuses.ready&&this.initialFeatures&&this.initialFeatures[a]&&void 0!==this.initialFeatures[a].variation){var n=this.initialFeatures[a].variation;return r={featureKey:a,reason:i.INITIAL,variationValue:n},this.logger.debug("using initial variation",r),r}var o=this.getFeature(e);if(!o)return r={featureKey:a,reason:i.NOT_FOUND},this.logger.warn("feature not found",r),r;if(!o.variations||0===o.variations.length)return r={featureKey:a,reason:i.NO_VARIATIONS},this.logger.warn("no variations",r),r;var s=this.interceptContext?this.interceptContext(t):t,l=(0,u.findForceFromFeature)(o,t,this.datafileReader,this.logger),f=l.force,c=l.forceIndex;if(f&&f.variation&&(p=o.variations.find((function(e){return e.value===f.variation}))))return r={featureKey:o.key,reason:i.FORCED,forceIndex:c,force:f,variation:p},this.logger.debug("forced variation found",r),r;var d=this.getBucketValue(o,s),h=d.bucketKey,g=d.bucketValue,v=(0,u.getMatchedTrafficAndAllocation)(o.traffic,s,g,this.datafileReader,this.logger),y=v.matchedTraffic,b=v.matchedAllocation;if(y){var p;if(y.variation&&(p=o.variations.find((function(e){return e.value===y.variation}))))return r={featureKey:o.key,reason:i.RULE,bucketKey:h,bucketValue:g,ruleKey:y.key,traffic:y,variation:p},this.logger.debug("override from rule",r),r;if(b&&b.variation&&(p=o.variations.find((function(e){return e.value===b.variation}))))return r={featureKey:o.key,reason:i.ALLOCATED,bucketKey:h,bucketValue:g,ruleKey:y.key,traffic:y,variation:p},this.logger.debug("allocated variation",r),r}return r={featureKey:o.key,reason:i.NO_MATCH,bucketKey:h,bucketValue:g},this.logger.debug("no matched variation",r),r}catch(t){return r={featureKey:"string"==typeof e?e:e.key,reason:i.ERROR,error:t},this.logger.error("error",r),r}},e.prototype.getVariation=function(e,t){void 0===t&&(t={});try{var r=this.evaluateVariation(e,t);return void 0!==r.variationValue?r.variationValue:r.variation?r.variation.value:void 0}catch(t){return void this.logger.error("getVariation",{featureKey:e,error:t})}},e.prototype.activate=function(e,t){void 0===t&&(t={});try{var r=this.evaluateVariation(e,t),i=r.variation?r.variation.value:r.variationValue;if(void 0===i)return;var a=this.interceptContext?this.interceptContext(t):t,n={};return this.datafileReader.getAllAttributes().filter((function(e){return!0===e.capture})).forEach((function(e){void 0!==a[e.key]&&(n[e.key]=t[e.key])})),this.emitter.emit("activation",e,i,a,n,r),i}catch(t){return void this.logger.error("activate",{featureKey:e,error:t})}},e.prototype.evaluateVariable=function(e,t,r){var a,n=this;void 0===r&&(r={});try{var o,s="string"==typeof e?e:e.key;if(!1===this.evaluateFlag(e,r).enabled)return a={featureKey:s,reason:i.DISABLED},this.logger.debug("feature is disabled",a),a;if(this.stickyFeatures&&this.stickyFeatures[s]&&(o=this.stickyFeatures[s].variables)){var c=o[t];if(void 0!==c)return a={featureKey:s,reason:i.STICKY,variableKey:t,variableValue:c},this.logger.debug("using sticky variable",a),a}if(this.statuses&&!this.statuses.ready&&this.initialFeatures&&this.initialFeatures[s]&&(o=this.initialFeatures[s].variables)&&void 0!==o[t])return a={featureKey:s,reason:i.INITIAL,variableKey:t,variableValue:o[t]},this.logger.debug("using initial variable",a),a;var d=this.getFeature(e);if(!d)return a={featureKey:s,reason:i.NOT_FOUND,variableKey:t},this.logger.warn("feature not found in datafile",a),a;var h=Array.isArray(d.variablesSchema)?d.variablesSchema.find((function(e){return e.key===t})):void 0;if(!h)return a={featureKey:s,reason:i.NOT_FOUND,variableKey:t},this.logger.warn("variable schema not found",a),a;var g=this.interceptContext?this.interceptContext(r):r,v=(0,u.findForceFromFeature)(d,r,this.datafileReader,this.logger),y=v.force,b=v.forceIndex;if(y&&y.variables&&void 0!==y.variables[t])return a={featureKey:d.key,reason:i.FORCED,forceIndex:b,force:y,variableKey:t,variableSchema:h,variableValue:y.variables[t]},this.logger.debug("forced variable",a),a;var p=this.getBucketValue(d,g),m=p.bucketKey,k=p.bucketValue,K=(0,u.getMatchedTrafficAndAllocation)(d.traffic,g,k,this.datafileReader,this.logger),A=K.matchedTraffic,V=K.matchedAllocation;if(A){if(A.variables&&void 0!==A.variables[t])return a={featureKey:d.key,reason:i.RULE,bucketKey:m,bucketValue:k,ruleKey:A.key,traffic:A,variableKey:t,variableSchema:h,variableValue:A.variables[t]},this.logger.debug("override from rule",a),a;var O;if(y&&y.variation?O=y.variation:V&&V.variation&&(O=V.variation),O&&Array.isArray(d.variations)){var F=d.variations.find((function(e){return e.value===O}));if(F&&F.variables){var E=F.variables.find((function(e){return e.key===t}));if(E){if(E.overrides){var I=E.overrides.find((function(e){return e.conditions?(0,l.allConditionsAreMatched)("string"==typeof e.conditions?JSON.parse(e.conditions):e.conditions,g,n.logger):!!e.segments&&(0,f.allGroupSegmentsAreMatched)((0,u.parseFromStringifiedSegments)(e.segments),g,n.datafileReader,n.logger)}));if(I)return a={featureKey:d.key,reason:i.OVERRIDE,bucketKey:m,bucketValue:k,ruleKey:A.key,traffic:A,variableKey:t,variableSchema:h,variableValue:I.value},this.logger.debug("variable override",a),a}if(void 0!==E.value)return a={featureKey:d.key,reason:i.ALLOCATED,bucketKey:m,bucketValue:k,ruleKey:A.key,traffic:A,variableKey:t,variableSchema:h,variableValue:E.value},this.logger.debug("allocated variable",a),a}}}}return a={featureKey:d.key,reason:i.DEFAULTED,bucketKey:m,bucketValue:k,variableKey:t,variableSchema:h,variableValue:h.defaultValue},this.logger.debug("using default value",a),a}catch(r){return a={featureKey:"string"==typeof e?e:e.key,reason:i.ERROR,variableKey:t,error:r},this.logger.error("error",a),a}},e.prototype.getVariable=function(e,t,r){void 0===r&&(r={});try{var i=this.evaluateVariable(e,t,r);return void 0!==i.variableValue?i.variableSchema&&"json"===i.variableSchema.type&&"string"==typeof i.variableValue?JSON.parse(i.variableValue):i.variableValue:void 0}catch(r){return void this.logger.error("getVariable",{featureKey:e,variableKey:t,error:r})}},e.prototype.getVariableBoolean=function(e,t,r){return void 0===r&&(r={}),h(this.getVariable(e,t,r),"boolean")},e.prototype.getVariableString=function(e,t,r){return void 0===r&&(r={}),h(this.getVariable(e,t,r),"string")},e.prototype.getVariableInteger=function(e,t,r){return void 0===r&&(r={}),h(this.getVariable(e,t,r),"integer")},e.prototype.getVariableDouble=function(e,t,r){return void 0===r&&(r={}),h(this.getVariable(e,t,r),"double")},e.prototype.getVariableArray=function(e,t,r){return void 0===r&&(r={}),h(this.getVariable(e,t,r),"array")},e.prototype.getVariableObject=function(e,t,r){return void 0===r&&(r={}),h(this.getVariable(e,t,r),"object")},e.prototype.getVariableJSON=function(e,t,r){return void 0===r&&(r={}),h(this.getVariable(e,t,r),"json")},e}();t.FeaturevisorInstance=g},584:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Logger=t.defaultLogHandler=t.defaultLogLevels=t.loggerPrefix=void 0,t.createLogger=function(e){void 0===e&&(e={});var i=e.levels||t.defaultLogLevels,a=e.handler||t.defaultLogHandler;return new r({levels:i,handler:a})},t.loggerPrefix="[Featurevisor]",t.defaultLogLevels=["warn","error"],t.defaultLogHandler=function(e,r,i){switch(void 0===i&&(i={}),e){case"debug":console.log(t.loggerPrefix,r,i);break;case"info":console.info(t.loggerPrefix,r,i);break;case"warn":console.warn(t.loggerPrefix,r,i);break;case"error":console.error(t.loggerPrefix,r,i)}};var r=function(){function e(e){this.levels=e.levels,this.handle=e.handler}return e.prototype.setLevels=function(e){this.levels=e},e.prototype.log=function(e,t,r){-1!==this.levels.indexOf(e)&&this.handle(e,t,r)},e.prototype.debug=function(e,t){this.log("debug",e,t)},e.prototype.info=function(e,t){this.log("info",e,t)},e.prototype.warn=function(e,t){this.log("warn",e,t)},e.prototype.error=function(e,t){this.log("error",e,t)},e}();t.Logger=r},826:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.segmentIsMatched=a,t.allGroupSegmentsAreMatched=function e(t,r,i,n){if("*"===t)return!0;if("string"==typeof t){var o=i.getSegment(t);return!!o&&a(o,r,n)}if("object"==typeof t){if("and"in t&&Array.isArray(t.and))return t.and.every((function(t){return e(t,r,i,n)}));if("or"in t&&Array.isArray(t.or))return t.or.some((function(t){return e(t,r,i,n)}));if("not"in t&&Array.isArray(t.not))return t.not.every((function(t){return!1===e(t,r,i,n)}))}return!!Array.isArray(t)&&t.every((function(t){return e(t,r,i,n)}))};var i=r(186);function a(e,t,r){return(0,i.allConditionsAreMatched)(e.conditions,t,r)}}},t={};function r(i){var a=t[i];if(void 0!==a)return a.exports;var n=t[i]={exports:{}};return e[i].call(n.exports,n,n.exports,r),n.exports}return r.d=(e,t)=>{for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r(166)})()));
//# sourceMappingURL=index.js.map

@@ -9,5 +9,2 @@ import { Feature, Segment, DatafileContentV1, DatafileContentV2, Attribute, AttributeKey, SegmentKey, FeatureKey } from "@featurevisor/types";

private features;
private attributesV2;
private segmentsV2;
private featuresV2;
constructor(datafileJson: DatafileContentV1 | DatafileContentV2);

@@ -14,0 +11,0 @@ getRevision(): string;

{
"name": "@featurevisor/sdk",
"version": "1.28.0",
"version": "1.29.1",
"description": "Featurevisor SDK for Node.js and the browser",

@@ -52,7 +52,7 @@ "main": "dist/index.cjs.js",

"dependencies": {
"@featurevisor/types": "^1.28.0",
"@featurevisor/types": "1.28.0",
"compare-versions": "^6.0.0-rc.1",
"murmurhash": "^2.0.1"
},
"gitHead": "2ae2980762184d9c47b878edffd0ec36d267df3b"
"gitHead": "280026d1fa618de8ee704f1b3ecdd5197db72181"
}

@@ -1,2 +0,2 @@

import { DatafileContent } from "@featurevisor/types";
import { Attribute, DatafileContent } from "@featurevisor/types";
import { DatafileReader } from "./datafileReader";

@@ -9,3 +9,3 @@

it("should return requested entities", function () {
it("v1 datafile schema: should return requested entities", function () {
const datafileJson: DatafileContent = {

@@ -90,2 +90,88 @@ schemaVersion: "1",

});
it("v2 datafile schema: should return requested entities", function () {
const datafileJson: DatafileContent = {
schemaVersion: "2",
revision: "1",
attributes: {
userId: {
key: "userId",
type: "string",
capture: true,
},
country: {
key: "country",
type: "string",
},
},
segments: {
netherlands: {
key: "netherlands",
conditions: [
{
attribute: "country",
operator: "equals",
value: "nl",
},
],
},
germany: {
key: "germany",
conditions: JSON.stringify([
{
attribute: "country",
operator: "equals",
value: "de",
},
]),
},
},
features: {
test: {
key: "test",
bucketBy: "userId",
variations: [
{ value: "control" },
{
value: "treatment",
variables: [
{
key: "showSidebar",
value: true,
},
],
},
],
traffic: [
{
key: "1",
segments: "*",
percentage: 100000,
allocation: [
{ variation: "control", range: [0, 0] },
{ variation: "treatment", range: [0, 100000] },
],
},
],
},
},
};
const reader = new DatafileReader(datafileJson);
expect(reader.getRevision()).toEqual("1");
expect(reader.getSchemaVersion()).toEqual("2");
expect(reader.getAllAttributes()).toEqual(
Object.keys(datafileJson.attributes).reduce((acc, key) => {
acc.push(datafileJson.attributes[key]);
return acc;
}, [] as Attribute[]),
);
expect(reader.getAttribute("userId")).toEqual(datafileJson.attributes.userId);
expect(reader.getSegment("netherlands")).toEqual(datafileJson.segments.netherlands);
expect((reader.getSegment("germany") as any).conditions[0].value).toEqual("de");
expect(reader.getSegment("belgium")).toEqual(undefined);
expect(reader.getFeature("test")).toEqual(datafileJson.features.test);
expect(reader.getFeature("test2")).toEqual(undefined);
});
});

@@ -28,12 +28,6 @@ import {

// v1
private attributes: Attribute[];
private segments: Segment[];
private features: Feature[];
private attributes: Record<AttributeKey, Attribute>;
private segments: Record<SegmentKey, Segment>;
private features: Record<FeatureKey, Feature>;
// v2
private attributesV2: Record<AttributeKey, Attribute>;
private segmentsV2: Record<SegmentKey, Segment>;
private featuresV2: Record<FeatureKey, Feature>;
constructor(datafileJson: DatafileContentV1 | DatafileContentV2) {

@@ -44,13 +38,26 @@ this.schemaVersion = datafileJson.schemaVersion;

if (this.schemaVersion === "2") {
// v2
const datafileJsonV2 = datafileJson as DatafileContentV2;
this.attributesV2 = datafileJsonV2.attributes;
this.segmentsV2 = datafileJsonV2.segments;
this.featuresV2 = datafileJsonV2.features;
this.attributes = datafileJsonV2.attributes;
this.segments = datafileJsonV2.segments;
this.features = datafileJsonV2.features;
} else {
// v1
const datafileJsonV1 = datafileJson as DatafileContentV1;
this.segments = datafileJsonV1.segments;
this.attributes = datafileJsonV1.attributes;
this.features = datafileJsonV1.features;
this.attributes = {};
datafileJsonV1.attributes.forEach((a) => {
this.attributes[a.key] = a;
});
this.segments = {};
datafileJsonV1.segments.forEach((s) => {
this.segments[s.key] = s;
});
this.features = {};
datafileJsonV1.features.forEach((f) => {
this.features[f.key] = f;
});
}

@@ -68,12 +75,7 @@ }

getAllAttributes(): Attribute[] {
if (this.schemaVersion !== "2") {
return this.attributes;
}
// v2
const result: Attribute[] = [];
for (const key in this.attributesV2) {
result.push(this.attributesV2[key]);
}
Object.keys(this.attributes).forEach((key) => {
result.push(this.attributes[key]);
});

@@ -84,14 +86,7 @@ return result;

getAttribute(attributeKey: AttributeKey): Attribute | undefined {
if (this.schemaVersion === "2") {
return this.attributesV2[attributeKey];
}
return this.attributes.find((a) => a.key === attributeKey);
return this.attributes[attributeKey];
}
getSegment(segmentKey: SegmentKey): Segment | undefined {
const segment =
this.schemaVersion === "2"
? this.segmentsV2[segmentKey]
: this.segments.find((s) => s.key === segmentKey);
const segment = this.segments[segmentKey];

@@ -106,13 +101,4 @@ if (!segment) {

getFeature(featureKey: FeatureKey): Feature | undefined {
const feature =
this.schemaVersion === "2"
? this.featuresV2[featureKey]
: this.features.find((f) => f.key === featureKey);
if (!feature) {
return undefined;
}
return feature;
return this.features[featureKey];
}
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc