@dxtmisha/functional-basic 0.12.4 → 0.12.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/library.d.ts +245 -16
- package/dist/library.js +463 -444
- package/package.json +1 -1
package/dist/library.d.ts
CHANGED
|
@@ -19,9 +19,46 @@ export declare function addTagHighlightMatch(value: string, search?: string, cla
|
|
|
19
19
|
export declare function anyToString<V>(value: V, isArrayString?: boolean): string;
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
|
-
* Class for working with requests.
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* Class for working with HTTP requests.
|
|
23
|
+
*
|
|
24
|
+
* It is a static wrapper over {@link ApiInstance}, providing a convenient interface for:
|
|
25
|
+
* - Performing standard HTTP requests (GET, POST, PUT, DELETE).
|
|
26
|
+
* - Global configuration (URL, headers, defaults).
|
|
27
|
+
* - Request lifecycle hooks (`setPreparation`, `setEnd`).
|
|
28
|
+
* - Automatic retries and session handling (Refresh Token).
|
|
29
|
+
* - Data processing and JSON parsing.
|
|
30
|
+
* - Localization support (`{locale}`, `{country}`, `{language}`).
|
|
31
|
+
* - Error handling and {@link ErrorCenter} integration.
|
|
32
|
+
* - Response emulation via {@link ApiResponse}.
|
|
33
|
+
*
|
|
34
|
+
* ---
|
|
35
|
+
*
|
|
36
|
+
* Класс для работы с HTTP-запросами.
|
|
37
|
+
*
|
|
38
|
+
* Является статической оберткой над {@link ApiInstance}, предоставляя удобный интерфейс для:
|
|
39
|
+
* - Выполнения стандартных HTTP-запросов (GET, POST, PUT, DELETE).
|
|
40
|
+
* - Глобальной настройки (URL, заголовки, параметры).
|
|
41
|
+
* - Хуков жизненного цикла (`setPreparation`, `setEnd`).
|
|
42
|
+
* - Автоматических повторов и обработки сессий (Refresh Token).
|
|
43
|
+
* - Обработки данных и парсинга JSON.
|
|
44
|
+
* - Поддержки локализации в URL (`{locale}`, `{country}`, `{language}`).
|
|
45
|
+
* - Обработки ошибок и интеграции с {@link ErrorCenter}.
|
|
46
|
+
* - Эмуляции ответов через {@link ApiResponse}.
|
|
47
|
+
*
|
|
48
|
+
* ---
|
|
49
|
+
*
|
|
50
|
+
* ### Usage Examples / Примеры использования:
|
|
51
|
+
*
|
|
52
|
+
* #### 1. Global Setup / Глобальная настройка
|
|
53
|
+
* ```typescript
|
|
54
|
+
* Api.setUrl('https://api.example.com/v1/')
|
|
55
|
+
* .setHeaders({ 'Authorization': 'Bearer token' });
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* #### 2. Basic Request / Базовый запрос
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const data = await Api.get<User>({ path: 'profile' });
|
|
61
|
+
* ```
|
|
25
62
|
*/
|
|
26
63
|
export declare class Api {
|
|
27
64
|
protected static item: ApiInstance;
|
|
@@ -100,13 +137,6 @@ export declare class Api {
|
|
|
100
137
|
* @param callback function for call/ функция для вызова
|
|
101
138
|
*/
|
|
102
139
|
static setPreparation(callback: (apiFetch: ApiFetch) => Promise<void>): Api;
|
|
103
|
-
/**
|
|
104
|
-
* Set config for API.
|
|
105
|
-
*
|
|
106
|
-
* Установить конфигурацию для API.
|
|
107
|
-
* @param config config for API/ конфигурация для API
|
|
108
|
-
*/
|
|
109
|
-
static setConfig(config?: ApiConfig): Api;
|
|
110
140
|
/**
|
|
111
141
|
* Modify the function after the request.
|
|
112
142
|
*
|
|
@@ -114,6 +144,20 @@ export declare class Api {
|
|
|
114
144
|
* @param callback function for call/ функция для вызова
|
|
115
145
|
*/
|
|
116
146
|
static setEnd(callback: (query: Response, apiFetch: ApiFetch) => Promise<ApiPreparationEnd>): Api;
|
|
147
|
+
/**
|
|
148
|
+
* Change the timeout for the request in milliseconds.
|
|
149
|
+
*
|
|
150
|
+
* Изменить таймаут запроса в миллисекундах.
|
|
151
|
+
* @param timeout timeout in milliseconds/ таймаут в миллисекундах
|
|
152
|
+
*/
|
|
153
|
+
static setTimeout(timeout: number): Api;
|
|
154
|
+
/**
|
|
155
|
+
* Set config for API.
|
|
156
|
+
*
|
|
157
|
+
* Установить конфигурацию для API.
|
|
158
|
+
* @param config config for API/ конфигурация для API
|
|
159
|
+
*/
|
|
160
|
+
static setConfig(config?: ApiConfig): Api;
|
|
117
161
|
/**
|
|
118
162
|
* To execute a request.
|
|
119
163
|
*
|
|
@@ -165,6 +209,8 @@ export declare type ApiConfig = {
|
|
|
165
209
|
preparation?: (apiFetch: ApiFetch) => Promise<void>;
|
|
166
210
|
/** Function to call after request/ Функция для вызова после запроса */
|
|
167
211
|
end: (query: Response, apiFetch: ApiFetch) => Promise<ApiPreparationEnd>;
|
|
212
|
+
/** Timeout for the request in milliseconds/ Таймаут запроса в миллисекундах */
|
|
213
|
+
timeout?: number;
|
|
168
214
|
};
|
|
169
215
|
|
|
170
216
|
/**
|
|
@@ -266,6 +312,10 @@ export declare type ApiFetch = {
|
|
|
266
312
|
hideError?: boolean;
|
|
267
313
|
/** Suppress loading/ Подавить загрузку */
|
|
268
314
|
hideLoading?: boolean;
|
|
315
|
+
/** Retry count/ Количество повторов */
|
|
316
|
+
retry?: number;
|
|
317
|
+
/** Retry delay in milliseconds/ Задержка повтора в миллисекундах */
|
|
318
|
+
retryDelay?: number;
|
|
269
319
|
/** Custom response processor/ Пользовательский процессор ответа */
|
|
270
320
|
queryReturn?: (query: Response) => Promise<any>;
|
|
271
321
|
/** Run global preparation hooks/ Запускать глобальные хуки подготовки */
|
|
@@ -305,9 +355,81 @@ export declare class ApiHeaders {
|
|
|
305
355
|
}
|
|
306
356
|
|
|
307
357
|
/**
|
|
308
|
-
*
|
|
309
|
-
*
|
|
310
|
-
*
|
|
358
|
+
* Core class for managing HTTP requests using the Fetch API.
|
|
359
|
+
*
|
|
360
|
+
* `ApiInstance` is a powerful and flexible engine for network communication, designed to handle
|
|
361
|
+
* complex scenarios like automatic token refreshing, request retries, response emulation,
|
|
362
|
+
* and global loading/error management. It is used as the base for the static {@link Api} class.
|
|
363
|
+
*
|
|
364
|
+
* ### Key Features:
|
|
365
|
+
* - **CRUD operations**: Support for `GET`, `POST`, `PUT`, `DELETE` methods with full type support.
|
|
366
|
+
* - **Lifecycle Hooks**: `setPreparation` (before request) and `setEnd` (after response) callbacks.
|
|
367
|
+
* - **Automatic Retries**: Built-in support for request repetition with randomized delays (jitter).
|
|
368
|
+
* - **Data Processing**: Intelligent JSON/FormData parsing and automatic payload extraction.
|
|
369
|
+
* - **Response Emulation**: Intercept and mock requests using the {@link ApiResponse} manager.
|
|
370
|
+
* - **Localization**: Automated substitution of `{locale}`, `{country}`, and `{language}` in URLs.
|
|
371
|
+
* - **Integration**: Seamless connectivity with {@link Loading} and {@link ErrorCenter} components.
|
|
372
|
+
*
|
|
373
|
+
* ---
|
|
374
|
+
*
|
|
375
|
+
* Основной класс для управления HTTP-запросами через Fetch API.
|
|
376
|
+
*
|
|
377
|
+
* `ApiInstance` — это мощный и гибкий движок для сетевого взаимодействия, разработанный для решения
|
|
378
|
+
* сложных задач, таких как автоматическое обновление токенов, повторы запросов, эмуляция ответов
|
|
379
|
+
* и глобальное управление индикацией загрузки и ошибками. Используется как основа для статического класса {@link Api}.
|
|
380
|
+
*
|
|
381
|
+
* ### Ключевые особенности:
|
|
382
|
+
* - **CRUD операции**: Поддержка методов `GET`, `POST`, `PUT`, `DELETE` с полной типизацией.
|
|
383
|
+
* - **Хуки жизненного цикла**: Колбэки `setPreparation` (до запроса) и `setEnd` (после ответа).
|
|
384
|
+
* - **Автоматические повторы**: Встроенная поддержка повтора запросов с джиттером.
|
|
385
|
+
* - **Обработка данных**: Интеллектуальный парсинг JSON/FormData и извлечение полезной нагрузки.
|
|
386
|
+
* - **Эмуляция ответов**: Перехват и подмена запросов через менеджер {@link ApiResponse}.
|
|
387
|
+
* - **Локализация**: Автоматическая подстановка плейсхолдеров `{locale}`, `{country}` и `{language}`.
|
|
388
|
+
* - **Интеграция**: Бесшовная связь с компонентами {@link Loading} и {@link ErrorCenter}.
|
|
389
|
+
*
|
|
390
|
+
* ---
|
|
391
|
+
*
|
|
392
|
+
* ### Usage Examples / Примеры использования:
|
|
393
|
+
*
|
|
394
|
+
* #### 1. Initialization and Configuration / Инициализация и настройка
|
|
395
|
+
* ```typescript
|
|
396
|
+
* const api = new ApiInstance('https://api.example.com/v1/');
|
|
397
|
+
* api.setHeaders({ 'Accept-Language': 'en' })
|
|
398
|
+
* .setTimeout(10000);
|
|
399
|
+
* ```
|
|
400
|
+
*
|
|
401
|
+
* #### 2. Simple Request / Простой запрос
|
|
402
|
+
* ```typescript
|
|
403
|
+
* const users = await api.get<User[]>({ path: 'users' });
|
|
404
|
+
* ```
|
|
405
|
+
*
|
|
406
|
+
* #### 3. Lifecycle Hooks: Auth & Refresh Token / Хуки жизненного цикла: Авторизация и Refresh Token
|
|
407
|
+
* ```typescript
|
|
408
|
+
* // Preparation hook for adding tokens / Хук подготовки для добавления токенов
|
|
409
|
+
* api.setPreparation(async (apiFetch) => {
|
|
410
|
+
* const token = localStorage.getItem('token');
|
|
411
|
+
* if (token) apiFetch.headers = { ...apiFetch.headers, Authorization: `Bearer ${token}` };
|
|
412
|
+
* });
|
|
413
|
+
*
|
|
414
|
+
* // End hook for token refresh / Хук завершения для обновления токена
|
|
415
|
+
* api.setEnd(async (response, apiFetch) => {
|
|
416
|
+
* if (response.status === 401) {
|
|
417
|
+
* const refreshed = await refreshToken();
|
|
418
|
+
* if (refreshed) return { reset: true }; // Retries the request / Повтор запроса
|
|
419
|
+
* }
|
|
420
|
+
* return {};
|
|
421
|
+
* });
|
|
422
|
+
* ```
|
|
423
|
+
*
|
|
424
|
+
* #### 4. Response Emulation (Mocking) / Эмуляция ответов (Моки)
|
|
425
|
+
* ```typescript
|
|
426
|
+
* api.getResponse().add({
|
|
427
|
+
* path: 'profile',
|
|
428
|
+
* method: 'GET',
|
|
429
|
+
* response: { id: 1, name: 'John Doe' },
|
|
430
|
+
* lag: true // simulate network delay / имитация задержки сети
|
|
431
|
+
* });
|
|
432
|
+
* ```
|
|
311
433
|
*/
|
|
312
434
|
export declare class ApiInstance {
|
|
313
435
|
protected url: string;
|
|
@@ -325,6 +447,8 @@ export declare class ApiInstance {
|
|
|
325
447
|
protected loading: LoadingInstance;
|
|
326
448
|
/** Error handler / Обработчик ошибок */
|
|
327
449
|
protected errorCenter: ErrorCenterInstance;
|
|
450
|
+
/** Timeout for the request in milliseconds/ Таймаут запроса в миллисекундах */
|
|
451
|
+
protected timeout: number;
|
|
328
452
|
/**
|
|
329
453
|
* Constructor
|
|
330
454
|
* @param url base path to the script/ базовый путь к скрипту
|
|
@@ -407,6 +531,13 @@ export declare class ApiInstance {
|
|
|
407
531
|
* @param callback function for call/ функция для вызова
|
|
408
532
|
*/
|
|
409
533
|
setEnd(callback: (query: Response, apiFetch: ApiFetch) => Promise<ApiPreparationEnd>): this;
|
|
534
|
+
/**
|
|
535
|
+
* Change the timeout for the request in milliseconds.
|
|
536
|
+
*
|
|
537
|
+
* Изменить таймаут запроса в миллисекундах.
|
|
538
|
+
* @param timeout timeout in milliseconds/ таймаут в миллисекундах
|
|
539
|
+
*/
|
|
540
|
+
setTimeout(timeout: number): this;
|
|
410
541
|
/**
|
|
411
542
|
* To execute a request.
|
|
412
543
|
*
|
|
@@ -442,13 +573,22 @@ export declare class ApiInstance {
|
|
|
442
573
|
* @param request list of parameters/ список параметров
|
|
443
574
|
*/
|
|
444
575
|
delete<T>(request: ApiFetch): Promise<T>;
|
|
576
|
+
/**
|
|
577
|
+
* Get retry delay.
|
|
578
|
+
*
|
|
579
|
+
* Получить задержку повтора.
|
|
580
|
+
* @param retryCount count of retries/ количество повторов
|
|
581
|
+
* @param retryDelay delay between retries/ задержка между повторами
|
|
582
|
+
*/
|
|
583
|
+
protected getRetryDelay(retryCount: number, retryDelay: number): number;
|
|
445
584
|
/**
|
|
446
585
|
* To execute a request.
|
|
447
586
|
*
|
|
448
587
|
* Выполнить запрос.
|
|
449
588
|
* @param apiFetch property of the request/ свойство запроса
|
|
589
|
+
* @param retryCount count of retries/ количество повторов
|
|
450
590
|
*/
|
|
451
|
-
protected fetch<T>(apiFetch: ApiFetch): Promise<T>;
|
|
591
|
+
protected fetch<T>(apiFetch: ApiFetch, retryCount?: number): Promise<T>;
|
|
452
592
|
/**
|
|
453
593
|
* Reading data from the response.
|
|
454
594
|
*
|
|
@@ -1092,6 +1232,14 @@ export declare class CacheStatic {
|
|
|
1092
1232
|
static get<T>(name: string, callback: () => T, comparison?: any[]): T;
|
|
1093
1233
|
}
|
|
1094
1234
|
|
|
1235
|
+
/**
|
|
1236
|
+
* Capitalizes the first letter of a string.
|
|
1237
|
+
*
|
|
1238
|
+
* Делает первую букву строки заглавной.
|
|
1239
|
+
* @param value string to capitalize / строка для капитализации
|
|
1240
|
+
*/
|
|
1241
|
+
export declare function capitalize(value: string): string;
|
|
1242
|
+
|
|
1095
1243
|
/**
|
|
1096
1244
|
* Class for working with cookies.
|
|
1097
1245
|
*
|
|
@@ -2105,10 +2253,83 @@ export declare type EventActivityItem<E extends ElementOrWindow> = {
|
|
|
2105
2253
|
|
|
2106
2254
|
/**
|
|
2107
2255
|
* Advanced wrapper for managing event listeners on DOM elements or the `window` object.
|
|
2108
|
-
*
|
|
2256
|
+
*
|
|
2257
|
+
* `EventItem` simplifies the entire event lifecycle (start, stop, toggle, reset), provides
|
|
2258
|
+
* built-in optimizations for high-frequency events, and ensures DOM safety by automatically
|
|
2259
|
+
* checking if elements are still in the document.
|
|
2260
|
+
*
|
|
2261
|
+
* ### Key Features:
|
|
2262
|
+
* - **Lifecycle Control**: Easily `start`, `stop`, `toggle`, or `reset` event listeners.
|
|
2263
|
+
* - **DOM Safety**: Automatically halts the event if the target element is removed from the DOM.
|
|
2264
|
+
* - **Specialized Optimizations**:
|
|
2265
|
+
* - `resize`: Uses `ResizeObserver` for any HTML element (not limited to `window`).
|
|
2266
|
+
* - `scroll-sync`: High-performance scroll tracking using `requestAnimationFrame`.
|
|
2267
|
+
* - **Dynamic Configuration**: Chained setters for target element, event type, listener, and options.
|
|
2268
|
+
* - **Custom Event Dispatching**: Built-in support for triggering events with custom data via `dispatch`.
|
|
2269
|
+
* - **Strict Typing**: Generic support for elements, event objects, and custom detail data.
|
|
2270
|
+
*
|
|
2271
|
+
* ---
|
|
2109
2272
|
*
|
|
2110
2273
|
* Продвинутая обертка для управления слушателями событий на DOM-элементах или объекте `window`.
|
|
2111
|
-
*
|
|
2274
|
+
*
|
|
2275
|
+
* `EventItem` упрощает весь жизненный цикл событий (запуск, остановка, переключение, сброс),
|
|
2276
|
+
* предоставляет встроенную оптимизацию для тяжелых событий и гарантирует безопасность работы с DOM,
|
|
2277
|
+
* автоматически проверяя наличие элементов в документе.
|
|
2278
|
+
*
|
|
2279
|
+
* ### Ключевые особенности:
|
|
2280
|
+
* - **Управление циклом**: Простой контроль через методы `start`, `stop`, `toggle` и `reset`.
|
|
2281
|
+
* - **Безопасность DOM**: Автоматическая остановка события, если целевой элемент удален из DOM.
|
|
2282
|
+
* - **Специальные оптимизации**:
|
|
2283
|
+
* - `resize`: Использует `ResizeObserver` для любых HTML-элементов (не только для `window`).
|
|
2284
|
+
* - `scroll-sync`: Высокопроизводительный трекинг скролла через `requestAnimationFrame`.
|
|
2285
|
+
* - **Динамическая настройка**: Чейнинг сеттеров для смены цели, типа события, метода или опций.
|
|
2286
|
+
* - **Диспетчеризация**: Встроенная поддержка вызова событий с передачей пользовательских данных через `dispatch`.
|
|
2287
|
+
* - **Строгая типизация**: Поддержка дженериков для типа элемента, объекта события и структуры данных.
|
|
2288
|
+
*
|
|
2289
|
+
* ---
|
|
2290
|
+
*
|
|
2291
|
+
* ### Usage Examples / Примеры использования:
|
|
2292
|
+
*
|
|
2293
|
+
* #### 1. Basic Listener / Базовый слушатель
|
|
2294
|
+
* ```typescript
|
|
2295
|
+
* const clickEvent = new EventItem('.btn', 'click', (e) => console.log('Clicked!'));
|
|
2296
|
+
* clickEvent.start();
|
|
2297
|
+
* ```
|
|
2298
|
+
*
|
|
2299
|
+
* #### 2. Specialized 'resize' and 'scroll-sync' / Оптимизированные 'resize' и 'scroll-sync'
|
|
2300
|
+
* ```typescript
|
|
2301
|
+
* // Tracks any element's size / Отслеживает размер любого элемента
|
|
2302
|
+
* const resizeEvent = new EventItem('.box', 'resize', (entry) => console.log('New size:', entry));
|
|
2303
|
+
*
|
|
2304
|
+
* // Performance-optimized scroll / Оптимизированный скролл
|
|
2305
|
+
* const scrollEvent = new EventItem(window, 'scroll-sync', () => console.log('Scrolling...'));
|
|
2306
|
+
*
|
|
2307
|
+
* resizeEvent.start();
|
|
2308
|
+
* scrollEvent.start();
|
|
2309
|
+
* ```
|
|
2310
|
+
*
|
|
2311
|
+
* #### 3. Custom Data and Dispatching / Пользовательские данные и диспетчеризация
|
|
2312
|
+
* ```typescript
|
|
2313
|
+
* interface UserData { id: number }
|
|
2314
|
+
* const emitter = new EventItem<Window, CustomEvent, UserData>(window, 'user-update');
|
|
2315
|
+
*
|
|
2316
|
+
* emitter.setListener((e, detail) => {
|
|
2317
|
+
* console.log('Update received for ID:', detail?.id);
|
|
2318
|
+
* });
|
|
2319
|
+
*
|
|
2320
|
+
* emitter.start();
|
|
2321
|
+
*
|
|
2322
|
+
* // Trigger manually with data / Вызов вручную с данными
|
|
2323
|
+
* emitter.dispatch({ id: 456 });
|
|
2324
|
+
* ```
|
|
2325
|
+
*
|
|
2326
|
+
* #### 4. Chaining and Dynamic Updates / Чейнинг и динамическое обновление
|
|
2327
|
+
* ```typescript
|
|
2328
|
+
* const tracker = new EventItem('.item-1', 'mousemove', (e) => console.log(e.clientX));
|
|
2329
|
+
*
|
|
2330
|
+
* // Switch element on the fly / Переключение элемента "на лету"
|
|
2331
|
+
* tracker.start().setElement('.item-2');
|
|
2332
|
+
* ```
|
|
2112
2333
|
*/
|
|
2113
2334
|
export declare class EventItem<E extends ElementOrWindow, O extends Event, D extends Record<string, any> = Record<string, any>> {
|
|
2114
2335
|
protected listener?: EventListenerDetail<O, D> | undefined;
|
|
@@ -6127,6 +6348,14 @@ export declare function setValues<T>(selected: T | T[] | undefined, value: any,
|
|
|
6127
6348
|
notEmpty?: boolean | undefined;
|
|
6128
6349
|
}): T | T[] | undefined;
|
|
6129
6350
|
|
|
6351
|
+
/**
|
|
6352
|
+
* Pause execution for a specified number of milliseconds.
|
|
6353
|
+
*
|
|
6354
|
+
* Приостановить выполнение на указанное количество миллисекунд.
|
|
6355
|
+
* @param ms milliseconds/ миллисекунды
|
|
6356
|
+
*/
|
|
6357
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
6358
|
+
|
|
6130
6359
|
/**
|
|
6131
6360
|
* This method is used to copy the values of all enumerable own properties from one source object to a target object.
|
|
6132
6361
|
* In priority according to the processing list.
|