@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 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
- * Class for working with requests.
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
- * It simplifies the entire event lifecycle (start, stop, toggle, reset) and provides built-in optimizations for high-frequency events like `resize` and `scroll-sync`.
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
- * Упрощает весь жизненный цикл событий (запуск, остановка, переключение, сброс) и предоставляет встроенные оптимизации для высокочастотных событий, таких как `resize` и `scroll-sync`.
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.