@omniconvert/server-side-testing-sdk
Version:
TypeScript SDK for server-side A/B testing and experimentation
95 lines • 3.22 kB
JavaScript
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
;