UNPKG

featurehub-javascript-client-sdk

Version:
162 lines 5.83 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalClientContext = void 0; const context_impl_1 = require("./context_impl"); const featurehub_repository_1 = require("./featurehub_repository"); const feature_state_holders_1 = require("./feature_state_holders"); const models_1 = require("./models"); const strategy_matcher_1 = require("./strategy_matcher"); class LocalFeatureRepository { constructor(environment, applyFeature) { var _a; this.features = new Map(); this.analyticsCollectors = new Array(); this._matchers = []; this._applyFeature = applyFeature || new strategy_matcher_1.ApplyFeature(); (_a = environment.features) === null || _a === void 0 ? void 0 : _a.forEach((fs) => { const holder = new feature_state_holders_1.FeatureStateBaseHolder(this, fs.key); holder.setFeatureState(fs); this.features.set(fs.key, holder); }); } apply(strategies, key, featureValueId, context) { return this._applyFeature.apply(strategies, key, featureValueId, context); } get readyness() { return featurehub_repository_1.Readyness.Ready; } notify(state, data) { } addValueInterceptor(matcher) { this._matchers.push(matcher); matcher.repository(this); } valueInterceptorMatched(key) { for (const matcher of this._matchers) { const m = matcher.matched(key); if (m === null || m === void 0 ? void 0 : m.value) { return m; } } return undefined; } addPostLoadNewFeatureStateAvailableListener(_) { return 0; } removePostLoadNewFeatureStateAvailableListener(_) { } addReadynessListener(listener) { return this.addReadinessListener(listener); } addReadinessListener(listener, _) { listener(featurehub_repository_1.Readyness.Ready, true); return 0; } removeReadinessListener(_) { } notReady() { } broadcastReadynessState() { return __awaiter(this, void 0, void 0, function* () { }); } addAnalyticCollector(collector) { this.analyticsCollectors.push(collector); } simpleFeatures() { const vals = new Map(); this.features.forEach((value, key) => { if (value.getKey()) { let val; switch (value.getType()) { case models_1.FeatureValueType.Boolean: val = value.getBoolean() ? 'true' : 'false'; break; case models_1.FeatureValueType.String: val = value.getString(); break; case models_1.FeatureValueType.Number: val = value.getNumber(); break; case models_1.FeatureValueType.Json: val = value.getRawJson(); break; default: val = undefined; } vals.set(key, val === undefined ? val : val.toString()); } }); return vals; } logAnalyticsEvent(action, other, ctx) { const featureStateAtCurrentTime = []; for (const fs of this.features.values()) { if (fs.isSet()) { const fsVal = ctx == null ? fs : fs.withContext(ctx); featureStateAtCurrentTime.push(fsVal.analyticsCopy()); } } this.analyticsCollectors.forEach((ac) => ac.logEvent(action, other || new Map(), featureStateAtCurrentTime)); } hasFeature(key) { return this.features.get(key); } feature(key) { let holder = this.features.get(key); if (holder === undefined) { holder = new feature_state_holders_1.FeatureStateBaseHolder(this, key); this.features.set(key, holder); } return holder; } getFeatureState(key) { return this.feature(key); } get catchAndReleaseMode() { return false; } set catchAndReleaseMode(value) { } release(disableCatchAndRelease) { return __awaiter(this, void 0, void 0, function* () { }); } getFlag(key) { return this.feature(key).getFlag(); } getString(key) { return this.feature(key).getString(); } getJson(key) { return this.feature(key).getRawJson(); } getNumber(key) { return this.feature(key).getNumber(); } isSet(key) { return this.feature(key).isSet(); } } class LocalClientContext extends context_impl_1.BaseClientContext { constructor(environment) { super(new LocalFeatureRepository(environment)); } build() { return __awaiter(this, void 0, void 0, function* () { return this; }); } feature(name) { return this._repository.feature(name).withContext(this); } close() { } } exports.LocalClientContext = LocalClientContext; //# sourceMappingURL=local_context.js.map