unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
72 lines • 3.07 kB
JavaScript
import FeatureToggleStore from '../feature-toggle-store.js';
export class FeatureToggleListBuilder {
constructor(db, selectColumns) {
this.getSelectColumns = () => {
return this.selectColumns;
};
this.query = (table) => {
this.internalQuery = this.db(table);
return this;
};
this.addSelectColumn = (column) => {
this.selectColumns.push(column);
};
this.withArchived = (includeArchived) => {
this.internalQuery.modify(FeatureToggleStore.filterByArchived, includeArchived);
return this;
};
this.withStrategies = (filter) => {
this.internalQuery.leftJoin(this.db('feature_strategies')
.select('*')
.where({ environment: filter })
.as('fs'), 'fs.feature_name', 'features.name');
return this;
};
this.withFeatureEnvironments = (filter) => {
this.internalQuery.leftJoin(this.db('feature_environments')
.select('feature_name', 'enabled', 'environment', 'variants', 'last_seen_at')
.where({ environment: filter })
.as('fe'), 'fe.feature_name', 'features.name');
return this;
};
this.withFeatureStrategySegments = () => {
this.internalQuery.leftJoin('feature_strategy_segment as fss', `fss.feature_strategy_id`, `fs.id`);
return this;
};
this.withSegments = () => {
this.internalQuery.leftJoin('segments', `segments.id`, `fss.segment_id`);
return this;
};
this.withDependentFeatureToggles = () => {
this.internalQuery.leftJoin('dependent_features as df', 'df.child', 'features.name');
return this;
};
this.withFeatureTags = () => {
this.internalQuery.leftJoin('feature_tag as ft', 'ft.feature_name', 'features.name');
return this;
};
this.withLastSeenByEnvironment = (archived = false) => {
if (archived) {
this.internalQuery.leftJoin('last_seen_at_metrics', function () {
this.on('last_seen_at_metrics.feature_name', '=', 'features.name').andOnNotNull('features.archived_at');
});
}
else {
this.internalQuery.leftJoin('last_seen_at_metrics', 'last_seen_at_metrics.feature_name', 'features.name');
}
return this;
};
this.withFavorites = (userId) => {
this.internalQuery.leftJoin(`favorite_features`, function () {
this.on('favorite_features.feature', 'features.name').andOnVal('favorite_features.user_id', '=', userId);
});
return this;
};
this.forProject = (project) => {
this.internalQuery.whereIn('features.project', project);
};
this.db = db;
this.selectColumns = selectColumns;
}
}
//# sourceMappingURL=feature-toggle-list-builder.js.map