unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
70 lines • 2.85 kB
JavaScript
import { parseSearchOperatorValue } from './search-utils.js';
export class FeatureSearchService {
constructor({ featureSearchStore }, _config, privateProjectChecker) {
this.convertToQueryParams = async (params) => {
const queryParams = [];
if (params.state) {
const parsedState = parseSearchOperatorValue('stale', params.state);
if (parsedState) {
queryParams.push(parsedState);
}
}
if (params.createdAt) {
const parsed = parseSearchOperatorValue('features.created_at', params.createdAt);
if (parsed)
queryParams.push(parsed);
}
if (params.createdBy) {
const parsed = parseSearchOperatorValue('users.id', params.createdBy);
if (parsed)
queryParams.push(parsed);
}
if (params.type) {
const parsed = parseSearchOperatorValue('features.type', params.type);
if (parsed)
queryParams.push(parsed);
}
if (params.lastSeenAt) {
const parsed = parseSearchOperatorValue('lastSeenAt', params.lastSeenAt);
if (parsed)
queryParams.push(parsed);
}
if (params.favorite) {
const parsed = parseSearchOperatorValue('favorite', params.favorite);
if (parsed)
queryParams.push(parsed);
}
['tag', 'segment', 'project'].forEach((field) => {
if (params[field]) {
const parsed = parseSearchOperatorValue(field, params[field]);
if (parsed)
queryParams.push(parsed);
}
});
const accessibleProjects = await this.privateProjectChecker.getUserAccessibleProjects(params.userId);
if (accessibleProjects.mode === 'limited') {
queryParams.push({
field: 'features.project',
operator: 'IS_ANY_OF',
values: accessibleProjects.projects,
});
}
return queryParams;
};
this.featureSearchStore = featureSearchStore;
this.privateProjectChecker = privateProjectChecker;
}
async search(params) {
const queryParams = await this.convertToQueryParams(params);
const { features, total } = await this.featureSearchStore.searchFeatures({
...params,
limit: params.limit,
sortBy: params.sortBy || 'createdAt',
}, queryParams);
return {
features,
total,
};
}
}
//# sourceMappingURL=feature-search-service.js.map