mirror of
https://github.com/Unleash/unleash.git
synced 2025-04-06 01:15:28 +02:00
Upgrades biome to 1.6.1, and updates husky pre-commit hook. Most changes here are making type imports explicit.
93 lines
2.7 KiB
TypeScript
93 lines
2.7 KiB
TypeScript
import type { Knex } from 'knex';
|
|
import type { IQueryParam } from '../feature-toggle/types/feature-toggle-strategies-store-type';
|
|
|
|
export interface NormalizeParamsDefaults {
|
|
limitDefault: number;
|
|
maxLimit?: number; // Optional because you might not always want to enforce a max limit
|
|
sortByDefault: string;
|
|
typeDefault?: string; // Optional field for type, not required for every call
|
|
}
|
|
|
|
export const applySearchFilters = (
|
|
qb: Knex.QueryBuilder,
|
|
searchParams: string[] | undefined,
|
|
columns: string[],
|
|
): void => {
|
|
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: Knex.QueryBuilder,
|
|
queryParams: IQueryParam[],
|
|
): void => {
|
|
queryParams.forEach((param) => {
|
|
switch (param.operator) {
|
|
case 'IS':
|
|
case 'IS_ANY_OF':
|
|
query.whereIn(param.field, param.values);
|
|
break;
|
|
case 'IS_NOT':
|
|
case 'IS_NONE_OF':
|
|
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: NormalizeParamsDefaults,
|
|
) => {
|
|
const {
|
|
query,
|
|
offset,
|
|
limit = defaults.limitDefault,
|
|
sortOrder,
|
|
sortBy = defaults.sortByDefault,
|
|
} = 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 normalizedSortBy = sortBy;
|
|
const normalizedSortOrder =
|
|
sortOrder === 'asc' || sortOrder === 'desc' ? sortOrder : 'asc';
|
|
|
|
return {
|
|
normalizedQuery,
|
|
normalizedLimit,
|
|
normalizedOffset,
|
|
normalizedSortBy,
|
|
normalizedSortOrder,
|
|
};
|
|
};
|