UNPKG

unleash-server

Version:

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

152 lines 5.86 kB
import NotFoundError from '../../lib/error/notfound-error.js'; export default class FakeFeatureEnvironmentStore { constructor() { this.featureEnvironments = []; } async addEnvironmentToFeature(featureName, environment, enabled) { this.featureEnvironments.push({ environment, enabled, featureName }); } async addVariantsToFeatureEnvironment(featureName, environment, variants) { this.setVariantsToFeatureEnvironments(featureName, [environment], variants); } async setVariantsToFeatureEnvironments(featureName, environments, variants) { this.featureEnvironments .filter((fe) => fe.featureName === featureName && environments.includes(fe.environment)) .forEach((fe) => { fe.variants = variants; }); } async delete(key) { this.featureEnvironments.splice(this.featureEnvironments.findIndex((fE) => fE.environment === key.environment && fE.featureName === key.featureName), 1); } async deleteAll() { this.featureEnvironments = []; } destroy() { } async disconnectFeatures( // eslint-disable-next-line @typescript-eslint/no-unused-vars _environment, // eslint-disable-next-line @typescript-eslint/no-unused-vars _project) { return Promise.resolve(undefined); } async exists(key) { return this.featureEnvironments.some((fE) => fE.featureName === key.featureName && fE.environment === key.environment); } async featureHasEnvironment(environment, featureName) { return this.exists({ environment, featureName }); } async get(key) { const featureEnvironment = this.featureEnvironments.find((fE) => fE.environment === key.environment && fE.featureName === key.featureName); if (featureEnvironment) { return featureEnvironment; } throw new NotFoundError(`Could not find environment ${key.environment} for feature: ${key.featureName}`); } async getAll() { return this.featureEnvironments; } getEnvironmentMetaData(environment, featureName) { return this.get({ environment, featureName }); } async isEnvironmentEnabled(featureName, environment) { try { const fE = await this.get({ featureName, environment }); return fE.enabled; } catch (_e) { return false; } } async removeEnvironmentForFeature(featureName, environment) { return this.delete({ featureName, environment }); } async setEnvironmentEnabledStatus(environment, featureName, enabled) { const fE = await this.get({ environment, featureName }); if (fE.enabled !== enabled) { fE.enabled = enabled; return 1; } else { return 0; } } async connectProject( // eslint-disable-next-line @typescript-eslint/no-unused-vars _environment, // eslint-disable-next-line @typescript-eslint/no-unused-vars _projectId) { return Promise.resolve(undefined); } async connectFeatures( // eslint-disable-next-line @typescript-eslint/no-unused-vars _environment, // eslint-disable-next-line @typescript-eslint/no-unused-vars _projectId) { return Promise.reject(new Error('Not implemented')); } async disconnectProject( // eslint-disable-next-line @typescript-eslint/no-unused-vars _environment, // eslint-disable-next-line @typescript-eslint/no-unused-vars _projectId) { return Promise.reject(new Error('Not implemented')); } async connectFeatureToEnvironmentsForProject( // eslint-disable-next-line @typescript-eslint/no-unused-vars _featureName, // eslint-disable-next-line @typescript-eslint/no-unused-vars _projectId) { return Promise.resolve(); } disableEnvironmentIfNoStrategies( // eslint-disable-next-line @typescript-eslint/no-unused-vars _featureName, // eslint-disable-next-line @typescript-eslint/no-unused-vars _environment) { return Promise.reject(new Error('Not implemented')); } copyEnvironmentFeaturesByProjects( // eslint-disable-next-line @typescript-eslint/no-unused-vars _sourceEnvironment, // eslint-disable-next-line @typescript-eslint/no-unused-vars _destinationEnvironment, // eslint-disable-next-line @typescript-eslint/no-unused-vars _projects) { throw new Error('Method not implemented.'); } cloneStrategies( // eslint-disable-next-line @typescript-eslint/no-unused-vars _sourceEnvironment, // eslint-disable-next-line @typescript-eslint/no-unused-vars _destinationEnvironment) { throw new Error('Method not implemented.'); } async addFeatureEnvironment(featureEnvironment) { this.featureEnvironments.push(featureEnvironment); return Promise.resolve(); } getEnvironmentsForFeature( // eslint-disable-next-line @typescript-eslint/no-unused-vars _featureName) { throw new Error('Method not implemented.'); } async getAllByFeatures( // eslint-disable-next-line @typescript-eslint/no-unused-vars features, // eslint-disable-next-line @typescript-eslint/no-unused-vars environment) { return this.featureEnvironments.filter((featureEnv) => (environment ? featureEnv.environment === environment : true) && features.includes(featureEnv.featureName)); } async variantExists(featureName) { return this.featureEnvironments.some((featureEnvironment) => featureEnvironment.featureName === featureName && featureEnvironment.variants && featureEnvironment.variants.length > 0); } } //# sourceMappingURL=fake-feature-environment-store.js.map