@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 +190 -8
- package/dist/library.js +4 -4
- 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;
|
|
@@ -318,9 +355,81 @@ export declare class ApiHeaders {
|
|
|
318
355
|
}
|
|
319
356
|
|
|
320
357
|
/**
|
|
321
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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": [
|