@dxtmisha/functional 1.11.11 → 1.11.12

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.
@@ -1,18 +1,70 @@
1
- import { ApiInstance, ApiData, ApiDataValidation } from '@dxtmisha/functional-basic';
1
+ import { ApiInstance, ApiData, ApiDataValidation, ApiErrorStorageList } from '@dxtmisha/functional-basic';
2
2
  import { UseApiRef } from './useApiRef';
3
3
  import { RefOrNormal, RefType } from '../../types/refTypes';
4
4
  import { ApiOptions } from '../../types/apiTypes';
5
5
  /**
6
- * Executes a request and immediately initializes it asynchronously.
6
+ * Asynchronous reactive composable for API requests with built-in SSR support.
7
+ * Wraps `useApiRef` and immediately calls `initSsr()` to ensure data is pre-fetched on the server side.
8
+ * Use this composable ONLY if you need the request to be executed on the server side during SSR.
9
+ * For all other cases, use `useApiRef`.
7
10
  *
8
- * Выполняет запрос и сразу инициализирует его асинхронно.
9
- * @param path path to request / путь к запросу
10
- * @param options data for the request / данные для запроса
11
- * @param reactivity should reactivity be enabled / включить ли reactivity
12
- * @param conditions conditions for executing the request / условия выполнения запроса
13
- * @param transformation transforms the received request / преобразовывает полученный запрос
14
- * @param validateResponseContract function to validate response data contract / функция для проверки контракта данных ответа
15
- * @param unmounted delete data from the cache / удалить ли данные из кеша
16
- * @param apiInstance Api instance / Экземпляр Api
11
+ * Асинхронный реактивный composable для API запросов со встроенной поддержкой SSR.
12
+ * Оборачивает `useApiRef` и сразу вызывает `initSsr()`, чтобы гарантировать предзагрузку данных на сервере.
13
+ * Используйте этот composable ТОЛЬКО если вам необходимо, чтобы запрос был выполнен на стороне сервера
14
+ * во время SSR. Во всех остальных случаях используйте обычный `useApiRef`.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * import { Schema as S } from '@effect/schema'
19
+ * import { useApiAsyncRef } from '@dxtmisha/functional'
20
+ *
21
+ * const userSchema = S.Struct({ id: S.Number, name: S.String })
22
+ *
23
+ * // Data will be pre-fetched on the server during SSR (onServerPrefetch)
24
+ * const { data, loading, errorItem, isResponseContractValid } = useApiAsyncRef(
25
+ * '/users/1',
26
+ * { method: 'GET' },
27
+ * true, // reactivity
28
+ * undefined, // conditions
29
+ * undefined, // transformation
30
+ * (data) => { // validateResponseContract
31
+ * try {
32
+ * return { status: 'success', data: S.decodeUnknownSync(userSchema)(data) }
33
+ * } catch (e) {
34
+ * return { status: 'error', errors: e }
35
+ * }
36
+ * },
37
+ * [ // errorContract
38
+ * { status: 404, message: 'User not found' }
39
+ * ]
40
+ * )
41
+ * ```
42
+ *
43
+ * @param path path to request (can be a Ref or Getter) / путь к запросу (может быть Ref или Getter)
44
+ * @param options data for the request (headers, method, etc.) / данные для запроса (заголовки, метод и т.д.)
45
+ * @param reactivity should reactivity be enabled (automatically re-fetch on deps change) /
46
+ * включить ли реактивность (автоматически повторять запрос при изменении зависимостей)
47
+ * @param conditions conditions for executing the request (request will wait until true) /
48
+ * условия выполнения запроса (запрос будет ждать пока не станет true)
49
+ * @param transformation transforms the received response data / преобразовывает полученные данные ответа
50
+ * @param validateResponseContract function to validate response data contract. Used to ensure that the API
51
+ * response matches the expected structure. Highly recommended to use with `@effect/schema`.
52
+ * It should return `ApiDataValidation` containing a `status` ('success' or 'error')
53
+ * and the parsed data or errors. /
54
+ * Функция для проверки контракта данных ответа. Используется для гарантии того, что ответ API соответствует
55
+ * ожидаемой структуре. Настоятельно рекомендуется использовать с `@effect/schema`. Должна возвращать объект
56
+ * `ApiDataValidation`, содержащий `status` ('success' или 'error') и распарсенные данные или ошибки.
57
+ * @param errorContract array of expected error contracts for the request (`ApiErrorStorageList`).
58
+ * Highly recommended to add if there is information about possible request errors. Allows you to predefine
59
+ * possible errors (by code, status, or custom validation). If an error occurs matching one of these contracts,
60
+ * it will be automatically processed and made available via the `errorItem` computed property. /
61
+ * Массив контрактов ожидаемых ошибок для запроса (`ApiErrorStorageList`). Желательно добавлять, если есть
62
+ * информация о возможных ошибках запроса. Позволяет заранее описать возможные ошибки (по коду, статусу или
63
+ * кастомной валидации). Если возникает ошибка, совпадающая с одним из контрактов, она автоматически
64
+ * обрабатывается и становится доступной через вычисляемое свойство `errorItem` для удобного отображения в UI.
65
+ * @param unmounted whether to stop the request and clear data from cache when component is unmounted /
66
+ * нужно ли останавливать запрос и удалять данные из кеша при размонтировании компонента
67
+ * @param apiInstance Api instance (defaults to global Api instance) /
68
+ * Экземпляр Api (по умолчанию используется глобальный экземпляр Api)
17
69
  */
18
- export declare function useApiAsyncRef<R, T = R>(path?: RefOrNormal<string | undefined>, options?: ApiOptions, reactivity?: boolean, conditions?: RefType<boolean>, transformation?: (data: T, isResponseContractValid?: ApiDataValidation) => ApiData<R>, validateResponseContract?: (data: T) => ApiDataValidation, unmounted?: boolean, apiInstance?: ApiInstance): UseApiRef<R>;
70
+ export declare function useApiAsyncRef<R, T = R>(path?: RefOrNormal<string | undefined>, options?: ApiOptions, reactivity?: boolean, conditions?: RefType<boolean>, transformation?: (data: T, isResponseContractValid?: ApiDataValidation) => ApiData<R>, validateResponseContract?: (data: T) => ApiDataValidation, errorContract?: ApiErrorStorageList, unmounted?: boolean, apiInstance?: ApiInstance): UseApiRef<R>;
@@ -1,20 +1,28 @@
1
- import { ApiInstance, ApiData, ApiFetch } from '@dxtmisha/functional-basic';
1
+ import { ApiInstance, ApiData, ApiFetch, ApiErrorStorageList } from '@dxtmisha/functional-basic';
2
2
  import { ApiOptions } from '../../types/apiTypes';
3
3
  import { RefOrNormal } from '../../types/refTypes';
4
4
  import { Ref } from 'vue';
5
5
  /**
6
6
  * Use API delete request.
7
+ * This is a convenient wrapper over `useApiRequest` that pre-fills the DELETE method.
7
8
  *
8
9
  * Использование API delete запроса.
10
+ * Это удобная обертка над `useApiRequest`, которая предустанавливает метод DELETE.
9
11
  * @param path Path to the API endpoint / Путь к endpoint API
10
12
  * @param action Action to perform after the request / Действие, выполняемое после запроса
11
13
  * @param transformation Transformation function / Функция трансформации
14
+ * @param errorContract array of expected error contracts for the request (`ApiErrorStorageList`).
15
+ * Highly recommended to add if there is information about possible request errors. Allows you to predefine
16
+ * possible errors (by code, status, or custom validation) which will be centrally processed by the application. /
17
+ * Массив контрактов ожидаемых ошибок для запроса (`ApiErrorStorageList`). Желательно добавлять, если есть
18
+ * информация о возможных ошибках запроса. Позволяет заранее описать возможные ошибки (по коду, статусу или
19
+ * кастомной валидации) для централизованной обработки в приложении.
12
20
  * @param toData Extract 'data' field from response / Извлечь поле 'data' из ответа
13
21
  * @param options Additional request options / Дополнительные опции запроса
14
22
  * @param apiInstance Api instance / Экземпляр Api
15
23
  * @returns Object with loading state and send method / Объект с состоянием загрузки и методом отправки
16
24
  */
17
- export declare function useApiDelete<T, Request extends ApiFetch['request'] = ApiFetch['request'], Return extends ApiData<T> = ApiData<T>>(path?: RefOrNormal<string | undefined>, action?: (data: Return | undefined) => Promise<void> | void, transformation?: (data: T) => Return, toData?: boolean, options?: ApiOptions, apiInstance?: ApiInstance): {
25
+ export declare function useApiDelete<T, Request extends ApiFetch['request'] = ApiFetch['request'], Return extends ApiData<T> = ApiData<T>>(path?: RefOrNormal<string | undefined>, action?: (data: Return | undefined) => Promise<void> | void, transformation?: (data: T) => Return, errorContract?: ApiErrorStorageList, toData?: boolean, options?: ApiOptions, apiInstance?: ApiInstance): {
18
26
  loading: Ref<boolean, boolean>;
19
27
  send(request?: Request | undefined): Promise<Return | undefined>;
20
28
  };
@@ -1,20 +1,28 @@
1
- import { ApiInstance, ApiData, ApiFetch } from '@dxtmisha/functional-basic';
1
+ import { ApiInstance, ApiData, ApiFetch, ApiErrorStorageList } from '@dxtmisha/functional-basic';
2
2
  import { ApiOptions } from '../../types/apiTypes';
3
3
  import { RefOrNormal } from '../../types/refTypes';
4
4
  import { Ref } from 'vue';
5
5
  /**
6
6
  * Use API get request.
7
+ * This is a convenient wrapper over `useApiRequest` that pre-fills the GET method.
7
8
  *
8
9
  * Использование API get запроса.
10
+ * Это удобная обертка над `useApiRequest`, которая предустанавливает метод GET.
9
11
  * @param path Path to the API endpoint / Путь к endpoint API
10
12
  * @param action Action to perform after the request / Действие, выполняемое после запроса
11
13
  * @param transformation Transformation function / Функция трансформации
14
+ * @param errorContract array of expected error contracts for the request (`ApiErrorStorageList`).
15
+ * Highly recommended to add if there is information about possible request errors. Allows you to predefine
16
+ * possible errors (by code, status, or custom validation) which will be centrally processed by the application. /
17
+ * Массив контрактов ожидаемых ошибок для запроса (`ApiErrorStorageList`). Желательно добавлять, если есть
18
+ * информация о возможных ошибках запроса. Позволяет заранее описать возможные ошибки (по коду, статусу или
19
+ * кастомной валидации) для централизованной обработки в приложении.
12
20
  * @param toData Extract 'data' field from response / Извлечь поле 'data' из ответа
13
21
  * @param options Additional request options / Дополнительные опции запроса
14
22
  * @param apiInstance Api instance / Экземпляр Api
15
23
  * @returns Object with loading state and send method / Объект с состоянием загрузки и методом отправки
16
24
  */
17
- export declare function useApiGet<T, Request extends ApiFetch['request'] = ApiFetch['request'], Return extends ApiData<T> = ApiData<T>>(path?: RefOrNormal<string | undefined>, action?: (data: Return | undefined) => Promise<void> | void, transformation?: (data: T) => Return, toData?: boolean, options?: ApiOptions, apiInstance?: ApiInstance): {
25
+ export declare function useApiGet<T, Request extends ApiFetch['request'] = ApiFetch['request'], Return extends ApiData<T> = ApiData<T>>(path?: RefOrNormal<string | undefined>, action?: (data: Return | undefined) => Promise<void> | void, transformation?: (data: T) => Return, errorContract?: ApiErrorStorageList, toData?: boolean, options?: ApiOptions, apiInstance?: ApiInstance): {
18
26
  loading: Ref<boolean, boolean>;
19
27
  send(request?: Request | undefined): Promise<Return | undefined>;
20
28
  };
@@ -1,10 +1,16 @@
1
- import { ApiInstance, ArrayToItem, FormattersListColumns, FormattersOptionsList, SearchColumns, ApiDataValidation, SearchFormatList, ApiData, ApiFetch } from '@dxtmisha/functional-basic';
1
+ import { ApiInstance, ArrayToItem, FormattersListColumns, FormattersOptionsList, SearchColumns, ApiDataValidation, SearchFormatList, ApiData, ApiErrorItem, ApiFetch } from '@dxtmisha/functional-basic';
2
2
  import { ApiManagementGet, ApiManagementRequest, ApiManagementSearch, ApiManagementValue } from '../../types/apiTypes';
3
3
  import { ComputedRef, Ref } from 'vue';
4
4
  /**
5
- * Executes an API management request and immediately initializes it asynchronously.
5
+ * Asynchronous reactive composable for API management requests with built-in SSR support.
6
+ * Wraps `useApiManagementRef` and immediately calls `initSsr()` to ensure data is pre-fetched on the server side.
7
+ * Use this composable ONLY if you need the request to be executed on the server side during SSR.
8
+ * For all other cases, use `useApiManagementRef`.
6
9
  *
7
- * Выполняет запрос управления API и сразу инициализирует его асинхронно.
10
+ * Асинхронный реактивный composable для запросов управления API со встроенной поддержкой SSR.
11
+ * Оборачивает `useApiManagementRef` и сразу вызывает `initSsr()`, чтобы гарантировать предзагрузку данных на сервере.
12
+ * Используйте этот composable ТОЛЬКО если вам необходимо, чтобы запрос был выполнен на стороне сервера
13
+ * во время SSR. Во всех остальных случаях используйте обычный `useApiManagementRef`.
8
14
  * @template Return type of data returned by the API / тип данных, возвращаемых API
9
15
  * @template FormattersOptions optional formatting rules / опциональные правила форматирования
10
16
  * @template Post data type for POST creation request / тип данных для POST-запроса создания
@@ -30,6 +36,7 @@ export declare function useApiManagementAsyncRef<Return extends ApiManagementVal
30
36
  responseValidationResult: ComputedRef< ApiDataValidation | undefined>;
31
37
  list: ComputedRef<SearchFormatList<ItemFormatters, Columns>>;
32
38
  readonly data: ComputedRef< ApiData<Return> | undefined>;
39
+ errorItem: ComputedRef< ApiErrorItem | undefined>;
33
40
  readonly length: ComputedRef<number>;
34
41
  lengthData: ComputedRef<number>;
35
42
  starting: ComputedRef<boolean>;
@@ -40,7 +47,7 @@ export declare function useApiManagementAsyncRef<Return extends ApiManagementVal
40
47
  loadingPut: Ref<boolean, boolean> | undefined;
41
48
  loadingDelete: Ref<boolean, boolean> | undefined;
42
49
  isSearch: ComputedRef<boolean> | undefined;
43
- search: Ref<string, string> | undefined;
50
+ search: Ref<string>;
44
51
  init: () => void;
45
52
  initSsr: () => void;
46
53
  reset: () => Promise<void>;
@@ -1,6 +1,6 @@
1
- import { FormattersOptionsList, ApiData, ApiInstance, ArrayToItem, SearchColumns, SearchFormatList, FormattersListColumns, ApiFetch, ApiDataValidation } from '@dxtmisha/functional-basic';
1
+ import { Ref, ComputedRef } from 'vue';
2
+ import { FormattersOptionsList, ApiData, ApiInstance, ArrayToItem, SearchColumns, SearchFormatList, FormattersListColumns, ApiFetch, ApiDataValidation, ApiErrorItem } from '@dxtmisha/functional-basic';
2
3
  import { ApiManagementGet, ApiManagementRequest, ApiManagementSearch, ApiManagementValue } from '../../types/apiTypes';
3
- import { ComputedRef, Ref } from 'vue';
4
4
  /**
5
5
  * A powerful composable for comprehensive API request orchestration.
6
6
  * It centrally manages data loading (GET), list formatting, client-side searching,
@@ -84,6 +84,8 @@ export declare function useApiManagementRef<Return extends ApiManagementValue, F
84
84
  list: ComputedRef<SearchFormatList<ItemFormatters, Columns>>;
85
85
  /** Raw reactive data from `useApiRef` / «Сырые» реактивные данные из `useApiRef` */
86
86
  readonly data: ComputedRef<ApiData<Return> | undefined>;
87
+ /** Current error from request / Текущая ошибка ответа */
88
+ errorItem: ComputedRef< ApiErrorItem | undefined>;
87
89
  /** Current number of items in `list` (changes with search) / Текущее количество элементов в `list` (меняется при поиске) */
88
90
  readonly length: ComputedRef<number>;
89
91
  /** Total number of items in raw `data` / Общее количество элементов в исходном `data` */
@@ -105,7 +107,7 @@ export declare function useApiManagementRef<Return extends ApiManagementValue, F
105
107
  /** Whether search is currently active / Активен ли поиск (есть ли поисковый запрос) */
106
108
  isSearch: ComputedRef<boolean> | undefined;
107
109
  /** Reactive search string (Proxy to `searchOptions.value`) / Реактивная строка поиска (Proxy к переданному `searchOptions.value`) */
108
- search: Ref<string, string> | undefined;
110
+ search: Ref<string>;
109
111
  /**
110
112
  * Manual initialization
111
113
  *
@@ -1,20 +1,28 @@
1
- import { ApiInstance, ApiData, ApiFetch } from '@dxtmisha/functional-basic';
1
+ import { ApiInstance, ApiData, ApiFetch, ApiErrorStorageList } from '@dxtmisha/functional-basic';
2
2
  import { ApiOptions } from '../../types/apiTypes';
3
3
  import { RefOrNormal } from '../../types/refTypes';
4
4
  import { Ref } from 'vue';
5
5
  /**
6
6
  * Use API post request.
7
+ * This is a convenient wrapper over `useApiRequest` that pre-fills the POST method.
7
8
  *
8
9
  * Использование API post запроса.
10
+ * Это удобная обертка над `useApiRequest`, которая предустанавливает метод POST.
9
11
  * @param path Path to the API endpoint / Путь к endpoint API
10
12
  * @param action Action to perform after the request / Действие, выполняемое после запроса
11
13
  * @param transformation Transformation function / Функция трансформации
14
+ * @param errorContract array of expected error contracts for the request (`ApiErrorStorageList`).
15
+ * Highly recommended to add if there is information about possible request errors. Allows you to predefine
16
+ * possible errors (by code, status, or custom validation) which will be centrally processed by the application. /
17
+ * Массив контрактов ожидаемых ошибок для запроса (`ApiErrorStorageList`). Желательно добавлять, если есть
18
+ * информация о возможных ошибках запроса. Позволяет заранее описать возможные ошибки (по коду, статусу или
19
+ * кастомной валидации) для централизованной обработки в приложении.
12
20
  * @param toData Extract 'data' field from response / Извлечь поле 'data' из ответа
13
21
  * @param options Additional request options / Дополнительные опции запроса
14
22
  * @param apiInstance Api instance / Экземпляр Api
15
23
  * @returns Object with loading state and send method / Объект с состоянием загрузки и методом отправки
16
24
  */
17
- export declare function useApiPost<T, Request extends ApiFetch['request'] = ApiFetch['request'], Return extends ApiData<T> = ApiData<T>>(path?: RefOrNormal<string | undefined>, action?: (data: Return | undefined) => Promise<void> | void, transformation?: (data: T) => Return, toData?: boolean, options?: ApiOptions, apiInstance?: ApiInstance): {
25
+ export declare function useApiPost<T, Request extends ApiFetch['request'] = ApiFetch['request'], Return extends ApiData<T> = ApiData<T>>(path?: RefOrNormal<string | undefined>, action?: (data: Return | undefined) => Promise<void> | void, transformation?: (data: T) => Return, errorContract?: ApiErrorStorageList, toData?: boolean, options?: ApiOptions, apiInstance?: ApiInstance): {
18
26
  loading: Ref<boolean, boolean>;
19
27
  send(request?: Request | undefined): Promise<Return | undefined>;
20
28
  };
@@ -1,20 +1,28 @@
1
- import { ApiInstance, ApiData, ApiFetch } from '@dxtmisha/functional-basic';
1
+ import { ApiInstance, ApiData, ApiFetch, ApiErrorStorageList } from '@dxtmisha/functional-basic';
2
2
  import { ApiOptions } from '../../types/apiTypes';
3
3
  import { RefOrNormal } from '../../types/refTypes';
4
4
  import { Ref } from 'vue';
5
5
  /**
6
6
  * Use API put request.
7
+ * This is a convenient wrapper over `useApiRequest` that pre-fills the PUT method.
7
8
  *
8
9
  * Использование API put запроса.
10
+ * Это удобная обертка над `useApiRequest`, которая предустанавливает метод PUT.
9
11
  * @param path Path to the API endpoint / Путь к endpoint API
10
12
  * @param action Action to perform after the request / Действие, выполняемое после запроса
11
13
  * @param transformation Transformation function / Функция трансформации
14
+ * @param errorContract array of expected error contracts for the request (`ApiErrorStorageList`).
15
+ * Highly recommended to add if there is information about possible request errors. Allows you to predefine
16
+ * possible errors (by code, status, or custom validation) which will be centrally processed by the application. /
17
+ * Массив контрактов ожидаемых ошибок для запроса (`ApiErrorStorageList`). Желательно добавлять, если есть
18
+ * информация о возможных ошибках запроса. Позволяет заранее описать возможные ошибки (по коду, статусу или
19
+ * кастомной валидации) для централизованной обработки в приложении.
12
20
  * @param toData Extract 'data' field from response / Извлечь поле 'data' из ответа
13
21
  * @param options Additional request options / Дополнительные опции запроса
14
22
  * @param apiInstance Api instance / Экземпляр Api
15
23
  * @returns Object with loading state and send method / Объект с состоянием загрузки и методом отправки
16
24
  */
17
- export declare function useApiPut<T, Request extends ApiFetch['request'] = ApiFetch['request'], Return extends ApiData<T> = ApiData<T>>(path?: RefOrNormal<string | undefined>, action?: (data: Return | undefined) => Promise<void> | void, transformation?: (data: T) => Return, toData?: boolean, options?: ApiOptions, apiInstance?: ApiInstance): {
25
+ export declare function useApiPut<T, Request extends ApiFetch['request'] = ApiFetch['request'], Return extends ApiData<T> = ApiData<T>>(path?: RefOrNormal<string | undefined>, action?: (data: Return | undefined) => Promise<void> | void, transformation?: (data: T) => Return, errorContract?: ApiErrorStorageList, toData?: boolean, options?: ApiOptions, apiInstance?: ApiInstance): {
18
26
  loading: Ref<boolean, boolean>;
19
27
  send(request?: Request | undefined): Promise<Return | undefined>;
20
28
  };
@@ -1,5 +1,5 @@
1
1
  import { ComputedRef, Ref } from 'vue';
2
- import { ApiInstance, ApiData, ApiDataValidation } from '@dxtmisha/functional-basic';
2
+ import { ApiInstance, ApiData, ApiDataValidation, ApiErrorStorageList, ApiErrorItem } from '@dxtmisha/functional-basic';
3
3
  import { ApiOptions } from '../../types/apiTypes';
4
4
  import { RefOrNormal, RefType } from '../../types/refTypes';
5
5
  /**
@@ -12,6 +12,8 @@ export interface UseApiRef<R> {
12
12
  data: ComputedRef<ApiData<R> | undefined>;
13
13
  /** Item (Ref) / Элемент (Ref) */
14
14
  item: Ref<ApiData<R> | undefined>;
15
+ /** Error item (Computed) / Элемент ошибки (Computed) */
16
+ errorItem: ComputedRef<ApiErrorItem | undefined>;
15
17
  /**
16
18
  * Status of response contract validation.
17
19
  *
@@ -84,19 +86,70 @@ export interface UseApiRef<R> {
84
86
  abort(): void;
85
87
  }
86
88
  /**
87
- * Returns data for working with requests.
89
+ * Main reactive composable for working with API requests in Vue.
90
+ * Automatically handles SSR, reactivity, caching, error storage, data validation, and transformation.
88
91
  *
89
- * Возвращает данные для работы с запросами.
90
- * @param path path to request / путь к запросу
91
- * @param options data for the request / данные для запроса
92
- * @param reactivity should reactivity be enabled / включить ли реактивность
93
- * @param conditions conditions for executing the request / условия выполнения запроса
94
- * @param transformation transforms the received request / преобразовывает полученный запрос
95
- * @param validateResponseContract function to validate response data contract / функция для проверки контракта данных ответа
96
- * @param unmounted delete data from the cache / удалить ли данные из кеша
97
- * @param apiInstance Api instance / Экземпляр Api
92
+ * Главный реактивный composable для работы с API запросами во Vue.
93
+ * Автоматически обрабатывает SSR, реактивность, кэширование, хранение ошибок, валидацию данных и трансформацию.
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * import { Schema as S } from '@effect/schema'
98
+ * import { useApiRef } from '@dxtmisha/functional'
99
+ *
100
+ * // Define a schema using @effect/schema
101
+ * const userSchema = S.Struct({ id: S.Number, name: S.String })
102
+ *
103
+ * const { data, loading, errorItem, isResponseContractValid } = useApiRef(
104
+ * '/users/1',
105
+ * { method: 'GET' },
106
+ * true, // reactivity
107
+ * undefined, // conditions
108
+ * (data) => ({ ...data, isTransformed: true }), // transformation
109
+ * (data) => { // validateResponseContract
110
+ * try {
111
+ * return { status: 'success', data: S.decodeUnknownSync(userSchema)(data) }
112
+ * } catch (e) {
113
+ * return { status: 'error', errors: e }
114
+ * }
115
+ * },
116
+ * [ // errorContract (ApiErrorStorageList)
117
+ * {
118
+ * status: 404,
119
+ * message: 'User not found'
120
+ * }
121
+ * ]
122
+ * )
123
+ * ```
124
+ *
125
+ * @param path path to request (can be a Ref or Getter) / путь к запросу (может быть Ref или Getter)
126
+ * @param options data for the request (headers, method, etc.) / данные для запроса (заголовки, метод и т.д.)
127
+ * @param reactivity should reactivity be enabled (automatically re-fetch on deps change) /
128
+ * включить ли реактивность (автоматически повторять запрос при изменении зависимостей)
129
+ * @param conditions conditions for executing the request (request will wait until true) /
130
+ * условия выполнения запроса (запрос будет ждать пока не станет true)
131
+ * @param transformation transforms the received response data / преобразовывает полученные данные ответа
132
+ * @param validateResponseContract function to validate response data contract. Used to ensure that the API
133
+ * response matches the expected structure. Highly recommended to use with `@effect/schema`.
134
+ * It should return `ApiDataValidation` containing a `status` ('success' or 'error')
135
+ * and the parsed data or errors. /
136
+ * Функция для проверки контракта данных ответа. Используется для гарантии того, что ответ API соответствует
137
+ * ожидаемой структуре. Настоятельно рекомендуется использовать с `@effect/schema`. Должна возвращать объект
138
+ * `ApiDataValidation`, содержащий `status` ('success' или 'error') и распарсенные данные или ошибки.
139
+ * @param errorContract array of expected error contracts for the request (`ApiErrorStorageList`).
140
+ * Highly recommended to add if there is information about possible request errors. Allows you to predefine
141
+ * possible errors (by code, status, or custom validation). If an error occurs matching one of these contracts,
142
+ * it will be automatically processed and made available via the `errorItem` computed property. /
143
+ * Массив контрактов ожидаемых ошибок для запроса (`ApiErrorStorageList`). Желательно добавлять, если есть
144
+ * информация о возможных ошибках запроса. Позволяет заранее описать возможные ошибки (по коду, статусу или
145
+ * кастомной валидации). Если возникает ошибка, совпадающая с одним из контрактов, она автоматически
146
+ * обрабатывается и становится доступной через вычисляемое свойство `errorItem` для удобного отображения в UI.
147
+ * @param unmounted whether to stop the request and clear data from cache when component is unmounted /
148
+ * нужно ли останавливать запрос и удалять данные из кеша при размонтировании компонента
149
+ * @param apiInstance Api instance (defaults to global Api instance) /
150
+ * Экземпляр Api (по умолчанию используется глобальный экземпляр Api)
98
151
  */
99
- export declare function useApiRef<R, T = R>(path?: RefOrNormal<string | undefined>, options?: ApiOptions, reactivity?: boolean, conditions?: RefType<boolean>, transformation?: (data: T, isResponseContractValid?: ApiDataValidation) => ApiData<R>, validateResponseContract?: (data: T) => ApiDataValidation, unmounted?: boolean, apiInstance?: ApiInstance): UseApiRef<R>;
152
+ export declare function useApiRef<R, T = R>(path?: RefOrNormal<string | undefined>, options?: ApiOptions, reactivity?: boolean, conditions?: RefType<boolean>, transformation?: (data: T, isResponseContractValid?: ApiDataValidation) => ApiData<R>, validateResponseContract?: (data: T) => ApiDataValidation, errorContract?: ApiErrorStorageList, unmounted?: boolean, apiInstance?: ApiInstance): UseApiRef<R>;
100
153
  /**
101
154
  * Defines global conditions for the API request.
102
155
  *
@@ -1,4 +1,4 @@
1
- import { ApiInstance, ApiMethodItem, ApiData, ApiFetch } from '@dxtmisha/functional-basic';
1
+ import { ApiInstance, ApiMethodItem, ApiData, ApiFetch, ApiErrorStorageList } from '@dxtmisha/functional-basic';
2
2
  import { ApiOptions } from '../../types/apiTypes';
3
3
  import { RefOrNormal } from '../../types/refTypes';
4
4
  import { Ref } from 'vue';
@@ -10,12 +10,19 @@ import { Ref } from 'vue';
10
10
  * @param method HTTP method / HTTP метод
11
11
  * @param action Action to perform after the request / Действие, выполняемое после запроса
12
12
  * @param transformation Transformation function / Функция трансформации
13
+ * @param errorContract array of expected error contracts for the request (`ApiErrorStorageList`).
14
+ * Highly recommended to add if there is information about possible request errors. Allows you to predefine
15
+ * possible errors (by code, status, or custom validation) which will be centrally processed by the application. /
16
+ * Массив контрактов ожидаемых ошибок для запроса (`ApiErrorStorageList`). Желательно добавлять, если есть
17
+ * информация о возможных ошибках запроса. Позволяет заранее описать возможные ошибки (по коду, статусу или
18
+ * кастомной валидации) для централизованной обработки в приложении.
13
19
  * @param toData Extract 'data' field from response / Извлечь поле 'data' из ответа
14
20
  * @param options Additional request options / Дополнительные опции запроса
15
21
  * @param apiInstance Api instance / Экземпляр Api
16
22
  * @returns Object with loading state and send method / Объект с состоянием загрузки и методом отправки
17
23
  */
18
- export declare function useApiRequest<T, Request extends ApiFetch['request'] = ApiFetch['request'], Return extends ApiData<T> = ApiData<T>>(path?: RefOrNormal<string | undefined>, method?: ApiMethodItem, action?: (data: Return | undefined) => Promise<void> | void, transformation?: (data: T) => Return, toData?: boolean, options?: ApiOptions, apiInstance?: ApiInstance): {
24
+ export declare function useApiRequest<T, Request extends ApiFetch['request'] = ApiFetch['request'], Return extends ApiData<T> = ApiData<T>>(path?: RefOrNormal<string | undefined>, method?: ApiMethodItem, action?: (data: Return | undefined) => Promise<void> | void, transformation?: (data: T) => Return, errorContract?: ApiErrorStorageList, toData?: boolean, options?: ApiOptions, apiInstance?: ApiInstance): {
25
+ /** Loading state / Состояние загрузки */
19
26
  loading: Ref<boolean, boolean>;
20
27
  /**
21
28
  * Send request.
@@ -0,0 +1,10 @@
1
+ import { ComputedRef } from 'vue';
2
+ import { ApiData, ApiErrorItem } from '@dxtmisha/functional-basic';
3
+ import { RefType } from '../../types/refTypes';
4
+ /**
5
+ * Returns the error item for the Api ref.
6
+ *
7
+ * Возвращает элемент ошибки для Api ref.
8
+ * @param data data for the request / данные для запроса
9
+ */
10
+ export declare function getApiErrorRef<R>(data: RefType<ApiData<R> | undefined>): ComputedRef<ApiErrorItem | undefined>;
@@ -45,6 +45,7 @@ export * from './functions/dxtFunctionalPlugin';
45
45
  export * from './functions/executeUse';
46
46
  export * from './functions/getInject';
47
47
  export * from './functions/getOptions';
48
+ export * from './functions/ref/getApiErrorRef';
48
49
  export * from './functions/ref/getBindRef';
49
50
  export * from './functions/ref/getRef';
50
51
  export * from './functions/ref/render';
@@ -1,4 +1,4 @@
1
- import { ApiData, ApiDataValidation, ApiDefaultValue, ApiFetch, ApiMethodItem, SearchColumns, SearchItem, SearchOptions } from '@dxtmisha/functional-basic';
1
+ import { ApiData, ApiDataValidation, ApiDefaultValue, ApiErrorStorageList, ApiFetch, ApiMethodItem, SearchColumns, SearchItem, SearchOptions } from '@dxtmisha/functional-basic';
2
2
  import { RefOrNormal, RefType } from './refTypes';
3
3
  import { Ref } from 'vue';
4
4
  /** Options for api requests/ Опции для запросов api */
@@ -27,6 +27,8 @@ export type ApiManagementGet<Return extends ApiManagementValue, Type extends Api
27
27
  transformation?: (data: Type, isResponseContractValid?: ApiDataValidation) => ApiData<Return>;
28
28
  /** Function to validate response data contract / Функция для проверки контракта данных ответа */
29
29
  validateResponseContract?: (data: Type) => ApiDataValidation;
30
+ /** Storage of response error contracts / Хранилище контрактов ошибок ответа */
31
+ errorContract?: ApiErrorStorageList;
30
32
  /** Validation function or class constructor for data / Функция валидации или конструктор класса для данных */
31
33
  typeData?: ((data: Return) => boolean) | any;
32
34
  /** Whether to clear data when the component is unmounted / Удалять ли данные при размонтировании компонента */
@@ -59,6 +61,8 @@ export type ApiManagementRequest<T, Return extends ApiData<T> = ApiData<T>> = {
59
61
  action?: (data: Return | undefined) => Promise<void> | void;
60
62
  /** Transformation before sending data / Трансформация перед отправкой данных */
61
63
  transformation?: (data: T) => Return;
64
+ /** Storage of response error contracts / Хранилище контрактов ошибок ответа */
65
+ errorContract?: ApiErrorStorageList;
62
66
  /** Whether to wrap the payload in a 'data' property / Обертывать ли полезную нагрузку в свойство 'data' */
63
67
  toData?: boolean;
64
68
  /** Additional mutation request options / Дополнительные опции запроса мутации */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dxtmisha/functional",
3
3
  "private": false,
4
- "version": "1.11.11",
4
+ "version": "1.11.12",
5
5
  "type": "module",
6
6
  "description": "A comprehensive library of utilities, base classes, and Vue 3 composables for reactive web development. Extends @dxtmisha/functional-basic with Composition API.",
7
7
  "keywords": [