Query Builder
- import:
@azure-net/kit/infra - Preferred location:
src/app/core/query-builders
Построитель URL-параметров с поддержкой различных форматов сериализации.
Основное использование
typescript
import { QueryBuilder } from '@azure-net/kit/infra';
// Все параметры настраиваемые при создании класса можно переопределять для каждого отдельного вызова метода build
const queryBuilder = new QueryBuilder({
arrayFormat: 'brackets', // 'repeat' | 'brackets' | 'comma' | 'json'
objectFormat: 'default' // 'default' | 'nested-brackets'
});
// Простые параметры
const query1 = queryBuilder.build({
page: 1,
limit: 10,
search: 'john'
});
// ?page=1&limit=10&search=john
// Массивы
const query2 = queryBuilder.build({
tags: ['javascript', 'svelte', 'typescript']
}, { arrayFormat: 'brackets' });
// ?tags[]=javascript&tags[]=svelte&tags[]=typescript
const query3 = queryBuilder.build({
ids: [1, 2, 3]
}, { arrayFormat: 'comma' });
// ?ids=1,2,3
// Объекты
const query4 = queryBuilder.build({
filter: {
status: 'active',
role: 'admin'
}
}, { objectFormat: 'nested-brackets' });
// ?filter[status]=active&filter[role]=adminКастомный QueryBuilder
typescript
class ApiQueryBuilder extends QueryBuilder {
transform(query: object): object {
// Кастомная трансформация параметров
const transformed = { ...query };
// Преобразование null в пустую строку
for (const [key, value] of Object.entries(transformed)) {
if (value === null) {
transformed[key] = '';
}
}
return transformed;
}
}
const customBuilder = new ApiQueryBuilder();Опции метода build
- delimiter - Добавлять ли знак вопроса в начале строки, по умолчанию: true;
- arrayFormat - форматирование массивов: 'repeat' | 'brackets' | 'comma' | 'json'. По умолчанию: 'repeat', может быть глобально задан в конструкторе.
- objectFormat - форматирование объектов: 'default' | 'nested-brackets'. По умолчанию: 'default', может быть глобально задан в конструкторе. При 'default' попытается просто превратить объект в строку. Пример с nested-brackets приведён выше.