UNPKG

@omniconvert/server-side-testing-sdk

Version:

TypeScript SDK for server-side A/B testing and experimentation

95 lines 3.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExperimentStorage = void 0; const types_1 = require("../types"); /** * Experiment storage implementation * Handles persistence and retrieval of experiment configurations */ class ExperimentStorage { constructor(driver) { this.driver = driver; } /** * Get all experiments */ getAll() { // Check cache version and clear if outdated if (!this.isCacheVersionValid()) { // Cache version outdated, clearing experiments (debug logging removed) this.clearCache(); return []; } const experimentsData = this.driver.get(ExperimentStorage.EXPERIMENTS_LIST_KEY); if (!experimentsData) { return []; } try { const experiments = typeof experimentsData === 'string' ? JSON.parse(experimentsData) : experimentsData; // Handle both array and object formats let result = []; if (Array.isArray(experiments)) { result = experiments; } else if (experiments && typeof experiments === 'object') { // Convert object with experiment IDs as keys to array of experiments result = Object.values(experiments); } return result; } catch (error) { throw new types_1.StorageException('Failed to get experiments', error); } } /** * Save experiments */ save(experiments) { try { // Update cache version when saving new experiments this.updateCacheVersion(); return this.driver.save(ExperimentStorage.EXPERIMENTS_LIST_KEY, experiments); } catch (error) { throw new types_1.StorageException('Failed to save experiments', error); } } /** * Check if the current cache version is valid */ isCacheVersionValid() { try { const storedVersion = this.driver.get(ExperimentStorage.CACHE_VERSION_KEY); if (!storedVersion) { return false; } const version = typeof storedVersion === 'string' ? parseInt(storedVersion, 10) : storedVersion; return version === ExperimentStorage.CURRENT_CACHE_VERSION; } catch { return false; } } /** * Update the cache version to current */ updateCacheVersion() { this.driver.save(ExperimentStorage.CACHE_VERSION_KEY, ExperimentStorage.CURRENT_CACHE_VERSION); } /** * Clear cached experiments and version */ clearCache() { this.driver.save(ExperimentStorage.EXPERIMENTS_LIST_KEY, []); this.driver.save(ExperimentStorage.CACHE_VERSION_KEY, 0); } } exports.ExperimentStorage = ExperimentStorage; ExperimentStorage.EXPERIMENTS_LIST_KEY = 'experiments'; ExperimentStorage.CACHE_VERSION_KEY = 'experiments_cache_version'; ExperimentStorage.CURRENT_CACHE_VERSION = 2; // Increment when experiment format changes //# sourceMappingURL=ExperimentStorage.js.map