UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.

64 lines 1.92 kB
import { UnleashEvents } from 'unleash-client'; import EventEmitter from 'events'; export default class Repository extends EventEmitter { constructor({ appName, bootstrapProvider, storageProvider, }) { super(); this.data = {}; this.appName = appName; this.bootstrapProvider = bootstrapProvider; this.storageProvider = storageProvider; this.segments = new Map(); } async start() { await this.loadBootstrap(); process.nextTick(() => this.emit(UnleashEvents.Ready)); } createSegmentLookup(segments) { if (!segments) { return new Map(); } return new Map(segments.map((segment) => [segment.id, segment])); } async save(response) { this.data = this.convertToMap(response.features); this.segments = this.createSegmentLookup(response.segments); await this.storageProvider.set(this.appName, response); } notEmpty(content) { return content.features.length > 0; } async loadBootstrap() { try { const content = await this.bootstrapProvider.readBootstrap(); if (content && this.notEmpty(content)) { await this.save(content); } } catch (_err) { // intentionally left empty } } convertToMap(features) { const obj = features.reduce((o, feature) => { const a = { ...o }; a[feature.name] = feature; return a; }, {}); return obj; } stop() { if (this.timer) { clearTimeout(this.timer); } } getSegment(segmentId) { return this.segments.get(segmentId); } getToggle(name) { return this.data[name]; } getToggles() { return Object.keys(this.data).map((key) => this.data[key]); } } //# sourceMappingURL=index.js.map