fui-material 2.8.10 → 2.8.11
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/f-ui-kit.es.js +170 -16
- package/dist/f-ui-kit.es.js.map +1 -1
- package/dist/f-ui-kit.umd.js +2 -2
- package/dist/f-ui-kit.umd.js.map +1 -1
- package/dist/types/context/FLibraryProvider.d.ts +12 -2
- package/dist/types/context/index.d.ts +3 -1
- package/dist/types/context/requestObserver.d.ts +61 -0
- package/dist/types/hooks/useFApi/useFApi.d.ts +6 -1
- package/package.json +2 -1
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { AxiosRequestConfig } from 'axios';
|
|
3
|
+
import { FRequestObserver } from './requestObserver';
|
|
4
|
+
export * from './requestObserver';
|
|
3
5
|
export interface ILibApiService {
|
|
4
6
|
request: <T>(url: string, config: AxiosRequestConfig) => Promise<T>;
|
|
5
7
|
}
|
|
6
8
|
export interface LibraryConfig {
|
|
7
9
|
apiService: ILibApiService;
|
|
10
|
+
/** Опциональный наблюдатель жизненного цикла HTTP-запросов */
|
|
11
|
+
requestObserver?: FRequestObserver;
|
|
8
12
|
}
|
|
9
|
-
|
|
13
|
+
export interface FLibraryProviderProps {
|
|
10
14
|
children: ReactNode;
|
|
11
15
|
config: LibraryConfig;
|
|
12
|
-
|
|
16
|
+
/** Опциональный наблюдатель жизненного цикла HTTP-запросов (альтернатива передаче внутри config) */
|
|
17
|
+
requestObserver?: FRequestObserver;
|
|
18
|
+
}
|
|
19
|
+
declare const LibraryContext: import("react").Context<LibraryConfig | null>;
|
|
20
|
+
export { LibraryContext };
|
|
21
|
+
declare const FLibraryProvider: ({ children, config, requestObserver, }: FLibraryProviderProps) => import("react").JSX.Element;
|
|
13
22
|
export declare const useFLibraryContext: () => LibraryConfig;
|
|
23
|
+
export declare const useFLibraryContextOptional: () => LibraryConfig | null;
|
|
14
24
|
export default FLibraryProvider;
|
|
@@ -1 +1,3 @@
|
|
|
1
|
-
export { default as FLibraryProvider } from "./FLibraryProvider";
|
|
1
|
+
export { default as FLibraryProvider, useFLibraryContext, useFLibraryContextOptional, LibraryContext } from "./FLibraryProvider";
|
|
2
|
+
export type { ILibApiService, LibraryConfig, FLibraryProviderProps } from "./FLibraryProvider";
|
|
3
|
+
export * from "./requestObserver";
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Итоговый результат выполнения HTTP-запроса.
|
|
3
|
+
*/
|
|
4
|
+
export type FRequestOutcome = 'success' | 'failure' | 'aborted';
|
|
5
|
+
/**
|
|
6
|
+
* Категория возникшей ошибки запроса.
|
|
7
|
+
*/
|
|
8
|
+
export type FRequestErrorCategory = 'http' | 'network' | 'timeout' | 'abort' | 'unknown';
|
|
9
|
+
/**
|
|
10
|
+
* Событие наблюдения жизненного цикла завершенного HTTP-запроса.
|
|
11
|
+
* Не содержит тел запроса/ответа, заголовков или чувствительных данных.
|
|
12
|
+
*/
|
|
13
|
+
export interface FRequestObservation {
|
|
14
|
+
/** HTTP-метод (GET, POST, PUT, DELETE и т.д.) в верхнем регистре */
|
|
15
|
+
method: string;
|
|
16
|
+
/** Запрашиваемый URL / путь */
|
|
17
|
+
url: string;
|
|
18
|
+
/** HTTP статус ответа сервера (если доступен) */
|
|
19
|
+
status?: number;
|
|
20
|
+
/** Приблизительная длительность запроса от запуска до завершения в миллисекундах */
|
|
21
|
+
durationMs: number;
|
|
22
|
+
/** Результат завершения запроса */
|
|
23
|
+
outcome: FRequestOutcome;
|
|
24
|
+
/** Категория ошибки (если произошла ошибка или запрос был отменен) */
|
|
25
|
+
errorCategory?: FRequestErrorCategory;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Интерфейс наблюдателя жизненного цикла запросов библиотеки.
|
|
29
|
+
*/
|
|
30
|
+
export interface FRequestObserver {
|
|
31
|
+
/**
|
|
32
|
+
* Вызывается однократно при завершении выполнения запроса (успех, сбой или отмена).
|
|
33
|
+
* Любые исключения внутри данного метода изолируются и не влияют на работу приложения.
|
|
34
|
+
*/
|
|
35
|
+
onRequestComplete(event: FRequestObservation): void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Внутренняя функция получения текущего времени высокой точности (браузер / среда исполнения).
|
|
39
|
+
*/
|
|
40
|
+
export declare const getRequestNow: () => number;
|
|
41
|
+
/**
|
|
42
|
+
* Внутренняя функция безопасного вычисления разницы во времени в мс.
|
|
43
|
+
*/
|
|
44
|
+
export declare const calcDurationMs: (startTime: number) => number;
|
|
45
|
+
/**
|
|
46
|
+
* Консервативная классификация ошибки запроса для наблюдателя.
|
|
47
|
+
*/
|
|
48
|
+
export declare function classifyRequestError(error: unknown): {
|
|
49
|
+
outcome: FRequestOutcome;
|
|
50
|
+
errorCategory: FRequestErrorCategory;
|
|
51
|
+
status?: number;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Безопасный вызов наблюдателя запросов с полной изоляцией ошибок.
|
|
55
|
+
* Ошибки внутри `onRequestComplete` никогда не прерывают выполнение запроса и не логируются в консоль.
|
|
56
|
+
*/
|
|
57
|
+
export declare function notifyRequestObserver(observer: FRequestObserver | undefined, observation: FRequestObservation): void;
|
|
58
|
+
/**
|
|
59
|
+
* Обёртка для выполнения асинхронной функции запроса с фиксацией наблюдения.
|
|
60
|
+
*/
|
|
61
|
+
export declare function observeRequest<T>(observer: FRequestObserver | undefined, requestFn: () => Promise<T>, method: string, url: string): Promise<T>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AxiosRequestConfig } from 'axios';
|
|
2
|
+
import { FRequestObserver } from '@context/requestObserver';
|
|
2
3
|
/**
|
|
3
4
|
* Тип возвращаемого значения хука `useFApi`.
|
|
4
5
|
*
|
|
@@ -59,6 +60,10 @@ type IProps<T> = {
|
|
|
59
60
|
* Например: `'data.items'`
|
|
60
61
|
*/
|
|
61
62
|
getValueByPath?: string;
|
|
63
|
+
/**
|
|
64
|
+
* Опциональный наблюдатель жизненного цикла HTTP-запросов (по умолчанию берется из FLibraryProvider, если доступен).
|
|
65
|
+
*/
|
|
66
|
+
requestObserver?: FRequestObserver;
|
|
62
67
|
};
|
|
63
68
|
/**
|
|
64
69
|
* Хук `useFApi` предоставляет удобную обёртку над `axios` с поддержкой:
|
|
@@ -106,7 +111,7 @@ type IProps<T> = {
|
|
|
106
111
|
* console.log(data);
|
|
107
112
|
* };
|
|
108
113
|
*/
|
|
109
|
-
declare const useFApi: <T>({ doNotUseState, defaultState, getValueByPath }?: IProps<T>) => {
|
|
114
|
+
declare const useFApi: <T>({ doNotUseState, defaultState, getValueByPath, requestObserver, }?: IProps<T>) => {
|
|
110
115
|
data: T | null;
|
|
111
116
|
loading: boolean;
|
|
112
117
|
error: string | null;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fui-material",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.11",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"build": "vite build && npm run build:types",
|
|
16
16
|
"build-publish": "vite build && npm run build:types && npm publish",
|
|
17
17
|
"lint": "eslint .",
|
|
18
|
+
"test": "vitest run",
|
|
18
19
|
"preview": "vite preview",
|
|
19
20
|
"storybook": "storybook dev -p 6006",
|
|
20
21
|
"deploy-storybook": "storybook build && gh-pages -d storybook-static --repo https://github.com/Allorion/fui-storybook.git",
|