UNPKG

unleash-server

Version:

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

70 lines 2.65 kB
export const applySearchFilters = (qb, searchParams, columns) => { const hasSearchParams = searchParams?.length; if (hasSearchParams) { const sqlParameters = searchParams.map((item) => `%${item}%`); const sqlQueryParameters = sqlParameters.map(() => '?').join(','); qb.where((builder) => { columns.forEach((column) => { builder.orWhereRaw(`(${column}) ILIKE ANY (ARRAY[${sqlQueryParameters}])`, sqlParameters); }); }); } }; export const applyGenericQueryParams = (query, queryParams) => { queryParams.forEach((param) => { const isSingleParam = param.values.length === 1; switch (param.operator) { case 'IS': case 'IS_ANY_OF': query.whereIn(param.field, param.values); break; case 'IS_NOT': case 'IS_NONE_OF': if (isSingleParam) { query.whereNot(param.field, param.values[0]); } else { query.whereNotIn(param.field, param.values); } break; case 'IS_BEFORE': query.where(param.field, '<', param.values[0]); break; case 'IS_ON_OR_AFTER': query.where(param.field, '>=', param.values[0]); break; } }); }; export const normalizeQueryParams = (params, defaults) => { const { query, offset, limit = defaults.limitDefault, sortOrder } = params; const normalizedQuery = query ?.split(',') .map((query) => query.trim()) .filter((query) => query); const maxLimit = defaults.maxLimit || 1000; const normalizedLimit = Number(limit) > 0 && Number(limit) <= maxLimit ? Number(limit) : defaults.limitDefault; const normalizedOffset = Number(offset) > 0 ? Number(offset) : 0; const normalizedSortOrder = sortOrder === 'asc' || sortOrder === 'desc' ? sortOrder : 'asc'; return { normalizedQuery, normalizedLimit, normalizedOffset, normalizedSortOrder, }; }; export const parseSearchOperatorValue = (field, value) => { const pattern = /^(IS|IS_NOT|IS_ANY_OF|IS_NONE_OF|INCLUDE|DO_NOT_INCLUDE|INCLUDE_ALL_OF|INCLUDE_ANY_OF|EXCLUDE_IF_ANY_OF|EXCLUDE_ALL|IS_BEFORE|IS_ON_OR_AFTER):(.+)$/; const match = value.match(pattern); if (match) { return { field, operator: match[1], values: match[2].split(',').map((value) => value.trim()), }; } return null; }; //# sourceMappingURL=search-utils.js.map