@dxtmisha/functional-basic 0.12.7 → 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;
@@ -318,9 +355,81 @@ export declare class ApiHeaders {
318
355
  }
319
356
 
320
357
  /**
321
- * Class for working with requests.
322
- *
323
- * Класс для работы с запросами.
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
+ * ```
324
433
  */
325
434
  export declare class ApiInstance {
326
435
  protected url: string;
@@ -2144,10 +2253,83 @@ export declare type EventActivityItem<E extends ElementOrWindow> = {
2144
2253
 
2145
2254
  /**
2146
2255
  * Advanced wrapper for managing event listeners on DOM elements or the `window` object.
2147
- * 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
+ * ---
2148
2272
  *
2149
2273
  * Продвинутая обертка для управления слушателями событий на DOM-элементах или объекте `window`.
2150
- * Упрощает весь жизненный цикл событий (запуск, остановка, переключение, сброс) и предоставляет встроенные оптимизации для высокочастотных событий, таких как `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
+ * ```
2151
2333
  */
2152
2334
  export declare class EventItem<E extends ElementOrWindow, O extends Event, D extends Record<string, any> = Record<string, any>> {
2153
2335
  protected listener?: EventListenerDetail<O, D> | undefined;
package/dist/library.js CHANGED
@@ -131,7 +131,7 @@ function b() {
131
131
  return location.href.startsWith("data:");
132
132
  }
133
133
  //#endregion
134
- //#region \0@oxc-project+runtime@0.120.0/helpers/typeof.js
134
+ //#region \0@oxc-project+runtime@0.122.0/helpers/typeof.js
135
135
  function x(e) {
136
136
  "@babel/helpers - typeof";
137
137
  return x = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) {
@@ -141,7 +141,7 @@ function x(e) {
141
141
  }, x(e);
142
142
  }
143
143
  //#endregion
144
- //#region \0@oxc-project+runtime@0.120.0/helpers/toPrimitive.js
144
+ //#region \0@oxc-project+runtime@0.122.0/helpers/toPrimitive.js
145
145
  function ee(e, t) {
146
146
  if (x(e) != "object" || !e) return e;
147
147
  var n = e[Symbol.toPrimitive];
@@ -153,13 +153,13 @@ function ee(e, t) {
153
153
  return (t === "string" ? String : Number)(e);
154
154
  }
155
155
  //#endregion
156
- //#region \0@oxc-project+runtime@0.120.0/helpers/toPropertyKey.js
156
+ //#region \0@oxc-project+runtime@0.122.0/helpers/toPropertyKey.js
157
157
  function te(e) {
158
158
  var t = ee(e, "string");
159
159
  return x(t) == "symbol" ? t : t + "";
160
160
  }
161
161
  //#endregion
162
- //#region \0@oxc-project+runtime@0.120.0/helpers/defineProperty.js
162
+ //#region \0@oxc-project+runtime@0.122.0/helpers/defineProperty.js
163
163
  function S(e, t, n) {
164
164
  return (t = te(t)) in e ? Object.defineProperty(e, t, {
165
165
  value: n,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dxtmisha/functional-basic",
3
3
  "private": false,
4
- "version": "0.12.7",
4
+ "version": "0.12.8",
5
5
  "type": "module",
6
6
  "description": "Foundational utility library for modern web development — HTTP client, geolocation, i18n, SEO meta tags, caching, storage, DOM utilities, and more. Framework-agnostic, zero dependencies, TypeScript-first.",
7
7
  "keywords": [