@dxtmisha/wiki 0.39.6 → 0.39.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/defineProperty-Bjg6wMoX.js +39 -0
- package/dist/library.d.ts +0 -1
- package/dist/library.js +25 -25
- package/dist/media.js +12 -0
- package/dist/storybook.js +26929 -11
- package/package.json +1 -1
- package/src/library.ts +0 -1
- package/src/media/functional/functional-basic/api/api.en.mdx +45 -0
- package/src/media/functional/functional-basic/api/api.ru.mdx +45 -0
- package/src/media/functional/functional-basic/api/api.vi.mdx +45 -0
- package/src/media/functional/functional-basic/classes/Api/Api.en.mdx +54 -54
- package/src/media/functional/functional-basic/classes/Api/Api.ru.mdx +54 -54
- package/src/media/functional/functional-basic/classes/Api/Api.vi.mdx +54 -54
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.en.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.ru.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.vi.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.en.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.ru.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.vi.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.en.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.ru.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.vi.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.en.mdx +28 -14
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.ru.mdx +33 -19
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.vi.mdx +33 -19
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.en.mdx +56 -0
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.ru.mdx +56 -0
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.vi.mdx +55 -0
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.en.mdx +101 -49
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.ru.mdx +101 -49
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.vi.mdx +98 -47
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.en.mdx +44 -26
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.ru.mdx +45 -27
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.vi.mdx +44 -26
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.en.mdx +50 -21
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.ru.mdx +54 -25
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.vi.mdx +55 -26
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.en.mdx +29 -32
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.ru.mdx +33 -36
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.vi.mdx +33 -36
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.en.mdx +34 -53
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.ru.mdx +33 -52
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.vi.mdx +39 -58
- package/src/media/functional/functional-basic/classes/Cache/Cache.en.mdx +7 -4
- package/src/media/functional/functional-basic/classes/Cache/Cache.ru.mdx +7 -4
- package/src/media/functional/functional-basic/classes/Cache/Cache.vi.mdx +28 -25
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.en.mdx +45 -53
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.ru.mdx +46 -54
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.vi.mdx +47 -55
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.en.mdx +13 -1
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.ru.mdx +13 -1
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.vi.mdx +13 -0
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.en.mdx +88 -44
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.ru.mdx +88 -44
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.vi.mdx +85 -41
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.en.mdx +43 -22
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.ru.mdx +46 -25
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.vi.mdx +43 -22
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.en.mdx +84 -0
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.ru.mdx +84 -0
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.vi.mdx +100 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.en.mdx +153 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.ru.mdx +153 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.vi.mdx +153 -0
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.en.mdx +32 -25
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.ru.mdx +32 -25
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.vi.mdx +32 -27
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.en.mdx +36 -4
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.ru.mdx +36 -4
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.vi.mdx +36 -4
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.en.mdx +101 -70
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.ru.mdx +100 -69
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.vi.mdx +101 -70
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.en.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.ru.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.vi.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.en.mdx +44 -96
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.ru.mdx +44 -96
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.vi.mdx +44 -96
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.en.mdx +49 -28
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.ru.mdx +21 -0
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.vi.mdx +63 -42
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.en.mdx +97 -109
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.ru.mdx +86 -98
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.vi.mdx +99 -111
- package/src/media/functional/functional-basic/classes/Geo/Geo.en.mdx +3 -3
- package/src/media/functional/functional-basic/classes/Geo/Geo.ru.mdx +5 -5
- package/src/media/functional/functional-basic/classes/Geo/Geo.vi.mdx +5 -5
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.en.mdx +83 -40
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.ru.mdx +83 -40
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.vi.mdx +87 -44
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.en.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.ru.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.vi.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.en.mdx +56 -105
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.ru.mdx +53 -102
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.vi.mdx +55 -105
- package/src/media/functional/functional-basic/classes/Hash/Hash.en.mdx +18 -7
- package/src/media/functional/functional-basic/classes/Hash/Hash.ru.mdx +18 -7
- package/src/media/functional/functional-basic/classes/Hash/Hash.vi.mdx +18 -7
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.en.mdx +54 -0
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.ru.mdx +54 -0
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.vi.mdx +54 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.en.mdx +78 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.ru.mdx +78 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.vi.mdx +78 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.en.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.ru.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.vi.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.en.mdx +131 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.ru.mdx +131 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.vi.mdx +131 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.en.mdx +97 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.ru.mdx +97 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.vi.mdx +97 -0
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.en.mdx +13 -5
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.ru.mdx +13 -5
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.vi.mdx +13 -5
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.en.mdx +37 -19
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.ru.mdx +37 -19
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.vi.mdx +35 -17
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.en.mdx +31 -19
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.ru.mdx +31 -19
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.vi.mdx +32 -20
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.en.mdx +29 -15
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.ru.mdx +28 -14
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.vi.mdx +28 -14
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.en.mdx +7 -3
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.ru.mdx +7 -3
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.vi.mdx +7 -3
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.en.mdx +17 -13
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.ru.mdx +17 -13
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.vi.mdx +17 -13
- package/src/media/functional/functional-basic/functions/createElement/createElement.en.mdx +2 -0
- package/src/media/functional/functional-basic/functions/createElement/createElement.ru.mdx +2 -0
- package/src/media/functional/functional-basic/functions/createElement/createElement.vi.mdx +2 -0
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.en.mdx +1 -3
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.ru.mdx +1 -3
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.vi.mdx +1 -3
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.en.mdx +13 -10
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.ru.mdx +14 -11
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.vi.mdx +12 -9
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.en.mdx +14 -13
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.ru.mdx +15 -14
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.vi.mdx +14 -13
- package/src/media/functional/functional-basic/functions/forEach/forEach.en.mdx +1 -1
- package/src/media/functional/functional-basic/functions/forEach/forEach.ru.mdx +1 -1
- package/src/media/functional/functional-basic/functions/forEach/forEach.vi.mdx +1 -1
- package/src/media/functional/functional-basic/functions/frame/frame.en.mdx +7 -4
- package/src/media/functional/functional-basic/functions/frame/frame.ru.mdx +6 -3
- package/src/media/functional/functional-basic/functions/frame/frame.vi.mdx +7 -4
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.en.mdx +34 -0
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.ru.mdx +34 -0
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.vi.mdx +35 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.en.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.ru.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.vi.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.en.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.ru.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.vi.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.en.mdx +17 -3
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.ru.mdx +17 -3
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.vi.mdx +18 -4
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.en.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.ru.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.vi.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.en.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.ru.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.vi.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.en.mdx +11 -4
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.ru.mdx +14 -7
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.vi.mdx +13 -6
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.en.mdx +3 -2
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.ru.mdx +3 -2
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.vi.mdx +3 -2
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.en.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.ru.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.vi.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toString/toString.en.mdx +28 -0
- package/src/media/functional/functional-basic/functions/toString/toString.ru.mdx +28 -0
- package/src/media/functional/functional-basic/functions/toString/toString.vi.mdx +28 -0
- package/src/media/functional/ui/about/about.en.mdx +45 -0
- package/src/media/functional/ui/about/about.ru.mdx +45 -0
- package/src/media/functional/ui/about/about.vi.mdx +45 -0
- package/src/media/functional/ui/component/component.en.mdx +104 -0
- package/src/media/functional/ui/component/component.ru.mdx +106 -0
- package/src/media/functional/ui/component/component.vi.mdx +104 -0
- package/src/media/functional/ui/setup/setup.en.mdx +72 -0
- package/src/media/functional/ui/setup/setup.ru.mdx +72 -0
- package/src/media/functional/ui/setup/setup.vi.mdx +72 -0
- package/src/media/functional/ui/wiki-data.en.mdx +114 -0
- package/src/media/functional/ui/wiki-data.ru.mdx +114 -0
- package/src/media/functional/ui/wiki-data.vi.mdx +114 -0
- package/dist/WikiStorybookDescriptions-IKMchHA-.js +0 -26959
|
@@ -10,11 +10,13 @@ It includes tight integration with dependency classes: `ApiStatus`, `ApiResponse
|
|
|
10
10
|
|
|
11
11
|
## Key Features
|
|
12
12
|
|
|
13
|
-
- **CRUD Methods** — convenient aliases `get`, `post`, `put`, `delete` for handling HTTP requests
|
|
13
|
+
- **CRUD Methods** — convenient aliases `get`, `post`, `put`, `patch`, `delete` for handling HTTP requests
|
|
14
14
|
- **Global Configuration** — setting base URL, default headers, and parameters for all requests
|
|
15
15
|
- **Lifecycle Hooks** — ability to set custom callback functions executed before (`setPreparation`) and after (`setEnd`) each request
|
|
16
16
|
- **Status Tracking** — access to the status and errors of the last request via `ApiStatus`
|
|
17
|
-
- **
|
|
17
|
+
- **Hydration** — transferring data from server to client (SSR) for instant rendering
|
|
18
|
+
- **Caching** — saving responses in internal or external storage via `ApiCache`
|
|
19
|
+
- **Response Emulation** — flexible management of mock data via `ApiResponse`
|
|
18
20
|
- **Automatic Parsing** — converting the request body into JSON/FormData and automatically extracting data from JSON responses
|
|
19
21
|
- **Geolocation** — automatic substitution of `{locale}`, `{country}`, `{language}` placeholders into request paths
|
|
20
22
|
|
|
@@ -35,10 +37,13 @@ The `ApiInstance` can be configured during initialization with custom dependency
|
|
|
35
37
|
- `preparationClass?: typeof ApiPreparation` — class for lifecycle hook management.
|
|
36
38
|
- `loadingClass?: LoadingInstance` — instance of the loading indicator manager (defaults to `Loading.getItem()`).
|
|
37
39
|
- `errorCenterClass?: ErrorCenterInstance` — instance of the error center for triggering events (defaults to `ErrorCenter.getItem()`).
|
|
40
|
+
- `hydrationClass?: typeof ApiHydration` — class for SSR hydration management.
|
|
38
41
|
|
|
39
|
-
##
|
|
42
|
+
## Methods
|
|
40
43
|
|
|
41
|
-
###
|
|
44
|
+
### Action
|
|
45
|
+
|
|
46
|
+
#### `request`
|
|
42
47
|
|
|
43
48
|
Core executor sequence method managing pure physical network fetch pipelines. Should a solitary string serve as param context, default `GET` assumptions trigger automatically.
|
|
44
49
|
In case of network failures (e.g., 500 status), the method explicitly throws an exception (`throw e`), allowing errors to be natively intercepted in `try/catch`. If the server returns a JSON object, the system automatically injects a `statusObject` field (instance of request status) to the returned payload.
|
|
@@ -48,49 +53,21 @@ In case of network failures (e.g., 500 status), the method explicitly throws an
|
|
|
48
53
|
|
|
49
54
|
**Returns:** `Promise<ApiData<T>>` — decoded endpoint structural response formatted interface (including `data`, `statusObject`, etc., when returning an object payload).
|
|
50
55
|
|
|
51
|
-
###
|
|
52
|
-
|
|
53
|
-
Dispatches a basic query through HTTP `GET` methodologies natively optimizing inputs payload onto string search parameters formats automatically.
|
|
54
|
-
|
|
55
|
-
**Parameters:**
|
|
56
|
-
- `request: ApiFetch` — fetch execution configuration property mapping (`path`, `request` body, and so on).
|
|
57
|
-
|
|
58
|
-
**Returns:** `Promise<T>`
|
|
59
|
-
|
|
60
|
-
### `post`
|
|
56
|
+
### Shorthand
|
|
61
57
|
|
|
62
|
-
|
|
58
|
+
- `get(request: ApiFetch): Promise<T>` — Dispatches a basic query through HTTP `GET` methodologies natively optimizing inputs payload onto string search parameters formats automatically.
|
|
59
|
+
- `post(request: ApiFetch): Promise<T>` — Transfers query packets across standard REST/GraphQL pipelines formatted onto the HTTP `POST` specification.
|
|
60
|
+
- `put(request: ApiFetch): Promise<T>` — Directs object modifications over target remote points using typical system environment HTTP `PUT`.
|
|
61
|
+
- `patch(request: ApiFetch): Promise<T>` — Initiates partial resource updates using the standard HTTP `PATCH` method.
|
|
62
|
+
- `delete(request: ApiFetch): Promise<T>` — Forwards structural clearance/purge request using classic URL targeted HTTP `DELETE`.
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
- `request: ApiFetch` — parameters interface structure container including URL pointing directives.
|
|
66
|
-
|
|
67
|
-
**Returns:** `Promise<T>`
|
|
68
|
-
|
|
69
|
-
### `put`
|
|
70
|
-
|
|
71
|
-
Directs object modifications over target remote points using typical system environment HTTP `PUT`.
|
|
72
|
-
|
|
73
|
-
**Parameters:**
|
|
74
|
-
- `request: ApiFetch` — query options mapped against backend routing.
|
|
75
|
-
|
|
76
|
-
**Returns:** `Promise<T>`
|
|
77
|
-
|
|
78
|
-
### `delete`
|
|
79
|
-
|
|
80
|
-
Forwards structural clearance/purge request using classic URL targeted HTTP `DELETE`.
|
|
81
|
-
|
|
82
|
-
**Parameters:**
|
|
83
|
-
- `request: ApiFetch` — arguments package structure wrapper.
|
|
84
|
-
|
|
85
|
-
**Returns:** `Promise<T>`
|
|
86
|
-
|
|
87
|
-
## Instance Retrieval Methods
|
|
64
|
+
### Check
|
|
88
65
|
|
|
89
66
|
- `isLocalhost(): boolean` — Returns `true` if the code is running on a local development server.
|
|
90
67
|
- `getStatus(): ApiStatus` — Returns the `ApiStatus` manager for tracking the state, errors, and complete response object of the last network request.
|
|
91
68
|
- `getResponse(): ApiResponse` — Returns the responses/emulation manager `ApiResponse` for controlling mock-responses.
|
|
92
69
|
|
|
93
|
-
|
|
70
|
+
### Configuration
|
|
94
71
|
|
|
95
72
|
Methods to configure the API (support chaining, returning the `ApiInstance` object):
|
|
96
73
|
- `setHeaders(headers: Record<string, string>): this` — Applies universal headers injected automatically toward outbound fetch activities.
|
|
@@ -99,21 +76,23 @@ Methods to configure the API (support chaining, returning the `ApiInstance` obje
|
|
|
99
76
|
- `setPreparation(callback: (apiFetch: ApiFetch) => Promise<void>): this` — Connects a custom hook function actively running just _before_ execution trigger occurs.
|
|
100
77
|
- `setEnd(callback: (query: Response, apiFetch: ApiFetch) => Promise<ApiPreparationEnd>): this` — Sets the hook triggered exactly _after_ network response returns.
|
|
101
78
|
|
|
102
|
-
|
|
79
|
+
### Auxiliary
|
|
103
80
|
|
|
104
|
-
- `getUrl(path: string, api?: boolean): string` — Generates the full target URL referencing the script, handling
|
|
81
|
+
- `getUrl(path: string, api?: boolean): string` — Generates the full target URL referencing the script, handling `{locale}`, `{country}`, `{language}` placeholder substitution.
|
|
105
82
|
- `getBody(request?: ApiFetch['request'], method?: string): string | FormData | undefined` — Creates data to be passed into the request physical body.
|
|
106
83
|
- `getBodyForGet(request: ApiFetch['request'], path?: string, method?: string): string` — Forms query parameters specifically for HTTP arguments assigned into the URL directly used when sending `GET` queries.
|
|
84
|
+
- `getHydration(): ApiHydration` — Returns the hydration manager.
|
|
85
|
+
- `getHydrationScript(): string` — Returns a string representation of the hydration data for the client.
|
|
107
86
|
|
|
108
87
|
## ApiFetch Object
|
|
109
88
|
|
|
110
|
-
`ApiFetch` is the main configuration object passed to all request methods (`request`, `get`, `post`, `put`, `delete`). All fields are optional:
|
|
89
|
+
`ApiFetch` is the main configuration object passed to all request methods (`request`, `get`, `post`, `put`, `patch`, `delete`). All fields are optional:
|
|
111
90
|
|
|
112
91
|
- `path?: string` — endpoint path relative to the base URL (e.g. `'users/list'`).
|
|
113
92
|
- `pathFull?: string` — full request URL. If provided, overrides `api` and `path`.
|
|
114
93
|
- `api?: boolean` — whether to prepend the base URL before `path`. Default: `true`.
|
|
115
|
-
- `method?: ApiMethod` — HTTP method (`'GET'`, `'POST'`, `'PUT'`, `'DELETE'`). Default: `'GET'`.
|
|
116
|
-
- `request?: FormData | Record<string, any> | string` — request body (for POST/PUT) or query parameters (for GET). Serialized as JSON or `FormData`.
|
|
94
|
+
- `method?: ApiMethod` — HTTP method (`'GET'`, `'POST'`, `'PUT'`, `'PATCH'`, `'DELETE'`). Default: `'GET'`.
|
|
95
|
+
- `request?: FormData | Record<string, any> | string` — request body (for POST/PUT/PATCH) or query parameters (for GET). Serialized as JSON or `FormData`.
|
|
117
96
|
- `headers?: Record<string, string> | null` — additional request headers. Pass `null` to disable all headers.
|
|
118
97
|
- `type?: string` — `Content-Type` header value. Default: `'application/json;charset=UTF-8'`.
|
|
119
98
|
- `auth?: boolean` — include authentication headers.
|
|
@@ -125,8 +104,8 @@ Methods to configure the API (support chaining, returning the `ApiInstance` obje
|
|
|
125
104
|
- `globalEnd?: boolean` — whether to run the global `setEnd` hook after the response. Default: `true`.
|
|
126
105
|
- `queryReturn?: (query: Response) => Promise<any>` — custom response processor instead of the default JSON reader.
|
|
127
106
|
- `init?: RequestInit` — additional options passed directly to native `fetch()` (CORS, cache mode, etc.).
|
|
128
|
-
- `timeout?: number` — request timeout in milliseconds. Default: `16000`ms.
|
|
129
|
-
- `controller?: AbortController` — controller for canceling the request.
|
|
107
|
+
- `timeout?: number` — request timeout in milliseconds. Default: `16000`ms (only used if `controller` is not provided).
|
|
108
|
+
- `controller?: AbortController` — controller for canceling the request. If provided, timeout is ignored.
|
|
130
109
|
- `retry?: number` — number of retries on failure.
|
|
131
110
|
- `retryDelay?: number` — base delay between retries in milliseconds. Default: `64`ms.
|
|
132
111
|
|
|
@@ -245,7 +224,80 @@ You can selectively disable global hooks in the `ApiFetch` object:
|
|
|
245
224
|
- `globalPreparation: false` — skip the `setPreparation` hook execution.
|
|
246
225
|
- `globalEnd: false` — skip the `setEnd` hook execution.
|
|
247
226
|
|
|
248
|
-
##
|
|
227
|
+
## Hydration
|
|
228
|
+
|
|
229
|
+
Hydration is a mechanism for transferring data obtained during Server-Side Rendering (SSR) to the client side. This avoids re-executing the same network requests immediately after the page loads in the browser, which significantly speeds up rendering and reduces server load.
|
|
230
|
+
|
|
231
|
+
### How it works
|
|
232
|
+
|
|
233
|
+
1. **Server-side (SSR):**
|
|
234
|
+
- All executed requests (usually `GET` methods with `global: true`) are automatically saved in the hydration list.
|
|
235
|
+
- After the page is formed, you need to call `api.getHydrationScript()` and insert the resulting string into the HTML template (usually at the end of the `<body>` tag).
|
|
236
|
+
|
|
237
|
+
2. **Client-side (Browser):**
|
|
238
|
+
- When an `ApiInstance` is created, it automatically looks for the hydration script on the page.
|
|
239
|
+
- Found data is loaded into the system and substituted for the first call of similar requests.
|
|
240
|
+
- Thus, the client code receives data instantly without waiting for a network response.
|
|
241
|
+
|
|
242
|
+
### Usage Example (SSR)
|
|
243
|
+
|
|
244
|
+
```javascript
|
|
245
|
+
// On the server
|
|
246
|
+
const api = new ApiInstance();
|
|
247
|
+
await api.get({ path: 'settings' });
|
|
248
|
+
|
|
249
|
+
// In the page template (e.g., at the end of body)
|
|
250
|
+
// The method returns a string: <script id="__ui:api:hydration:id__" type="application/json">[...]</script>
|
|
251
|
+
const hydrationScript = api.getHydrationScript();
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
## Caching
|
|
256
|
+
|
|
257
|
+
The library provides a built-in mechanism for caching responses, allowing you to save request results in memory or in external storage (e.g., `LocalStorage`).
|
|
258
|
+
|
|
259
|
+
### Key Features
|
|
260
|
+
|
|
261
|
+
- **Time to Live (TTL)** — for each request, you can specify the cache validity time in seconds.
|
|
262
|
+
- **External Storage** — ability to integrate with any asynchronous data storage.
|
|
263
|
+
- **Automatic Cleanup** — old data is removed from memory when limits are exceeded.
|
|
264
|
+
|
|
265
|
+
### Setting up External Storage
|
|
266
|
+
|
|
267
|
+
By default, the cache works only in RAM and is reset when the page is reloaded. To save data long-term, you need to initialize `ApiCache` with your own listeners (for example, using `LocalStorage` or `IndexedDB`):
|
|
268
|
+
|
|
269
|
+
```javascript
|
|
270
|
+
import { ApiCache, DataStorage } from '@dxtmisha/functional';
|
|
271
|
+
|
|
272
|
+
// Example of initialization using LocalStorage via DataStorage wrapper
|
|
273
|
+
ApiCache.init(
|
|
274
|
+
async (key) => DataStorage.get(key),
|
|
275
|
+
async (key, value) => {
|
|
276
|
+
DataStorage.set(key, value);
|
|
277
|
+
return true;
|
|
278
|
+
},
|
|
279
|
+
async (key) => {
|
|
280
|
+
DataStorage.remove(key);
|
|
281
|
+
return true;
|
|
282
|
+
}
|
|
283
|
+
);
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### Usage in Requests
|
|
287
|
+
|
|
288
|
+
To enable caching, just pass the time in seconds in the `cache` field of the `ApiFetch` object:
|
|
289
|
+
|
|
290
|
+
```javascript
|
|
291
|
+
// Cache response for 1 hour (3600 seconds)
|
|
292
|
+
const data = await api.get({
|
|
293
|
+
path: 'catalog/list',
|
|
294
|
+
cache: 3600
|
|
295
|
+
});
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
If the data is in the cache and its lifetime has not expired, the library will return it instantly without performing a real request to the server.
|
|
299
|
+
|
|
300
|
+
## Response Emulation
|
|
249
301
|
|
|
250
302
|
The emulator manager `ApiResponse` (accessible via `api.getResponse()`) allows configuring mock responses for specified paths. This is incredibly useful during frontend UI development without a completely ready backend API or for writing test fixtures.
|
|
251
303
|
|
|
@@ -255,7 +307,7 @@ The `add` method accepts an `ApiResponseItem` object or an array of such objects
|
|
|
255
307
|
|
|
256
308
|
**Key `ApiResponseItem` fields:**
|
|
257
309
|
- `path` — String (exact match) or Regular Expression (`RegExp`) to intercept the request URL.
|
|
258
|
-
- `method` — HTTP method (`ApiMethodItem.get`, `post`, etc.).
|
|
310
|
+
- `method` — HTTP method (`ApiMethodItem.get`, `post`, `put`, `patch`, etc.).
|
|
259
311
|
- `request` — (Optional) Request body filter. You can use the special marker `'*any'` to bypass payload validation and capture all requests to this path.
|
|
260
312
|
- `response` — Static data object _or_ a dynamic factory function `(request) => any` that generates a response based on the incoming request payload.
|
|
261
313
|
- `disable` — (Optional) Disable this mock (boolean or callback).
|
|
@@ -10,11 +10,13 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
10
10
|
|
|
11
11
|
## Ключевые особенности
|
|
12
12
|
|
|
13
|
-
- **CRUD методы** — удобные алиасы `get`, `post`, `put`, `delete` для работы с HTTP-запросами
|
|
13
|
+
- **CRUD методы** — удобные алиасы `get`, `post`, `put`, `patch`, `delete` для работы с HTTP-запросами
|
|
14
14
|
- **Глобальная конфигурация** — установка базового URL, заголовков и параметров по умолчанию для всех запросов
|
|
15
15
|
- **Хуки жизненного цикла** — возможность задать функции, выполняемые до (`setPreparation`) и после (`setEnd`) каждого запроса
|
|
16
16
|
- **Отслеживание статуса** — доступ к статусу и ошибкам последнего запроса через `ApiStatus`
|
|
17
|
-
-
|
|
17
|
+
- **Гидратация** — передача данных от сервера к клиенту (SSR) для мгновенной отрисовки
|
|
18
|
+
- **Кэширование** — сохранение ответов во внутреннем или внешнем хранилище через `ApiCache`
|
|
19
|
+
- **Эмуляция ответов** — гибкое управление мок-данными через `ApiResponse`
|
|
18
20
|
- **Автоматический парсинг** — преобразование тела запроса в JSON/FormData и автоматическое извлечение данных из JSON-ответов
|
|
19
21
|
- **Геолокация** — автоматическая подстановка `{locale}`, `{country}`, `{language}` в пути запросов
|
|
20
22
|
|
|
@@ -35,10 +37,13 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
35
37
|
- `preparationClass?: typeof ApiPreparation` — класс для управления хуками жизненного цикла.
|
|
36
38
|
- `loadingClass?: LoadingInstance` — экземпляр менеджера индикации загрузки (по умолчанию: `Loading.getItem()`).
|
|
37
39
|
- `errorCenterClass?: ErrorCenterInstance` — экземпляр центра ошибок для вызова событий (по умолчанию: `ErrorCenter.getItem()`).
|
|
40
|
+
- `hydrationClass?: typeof ApiHydration` — класс для управления гидратацией SSR.
|
|
38
41
|
|
|
39
|
-
## Методы
|
|
42
|
+
## Методы
|
|
40
43
|
|
|
41
|
-
###
|
|
44
|
+
### Действие
|
|
45
|
+
|
|
46
|
+
#### `request`
|
|
42
47
|
|
|
43
48
|
Универсальный метод для выполнения сетевого HTTP-запроса. Если передана строка, выполняется простой `GET` запрос по этому адресу.
|
|
44
49
|
В случае сетевых сбоев (например, 500 статус) метод явно выбрасывает исключение (`throw e`), что позволяет перехватывать ошибки в `try/catch`. Если сервер возвращает JSON объект, к возвращаемым данным автоматически добавляется поле `statusObject` (инстанс статуса запроса).
|
|
@@ -48,49 +53,21 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
48
53
|
|
|
49
54
|
**Возвращает:** `Promise<ApiData<T>>` — возвращает спарсенные данные ответа сервера (с полями `data`, `statusObject` и др., если возвращается объект).
|
|
50
55
|
|
|
51
|
-
###
|
|
52
|
-
|
|
53
|
-
Отправляет запрос методом `GET`.
|
|
54
|
-
|
|
55
|
-
**Параметры:**
|
|
56
|
-
- `request: ApiFetch` — конфигурационный объект запроса (содержащий `path`, `request` и т.д.).
|
|
57
|
-
|
|
58
|
-
**Возвращает:** `Promise<T>`
|
|
59
|
-
|
|
60
|
-
### `post`
|
|
56
|
+
### Сокращенные методы
|
|
61
57
|
|
|
62
|
-
Отправляет запрос методом `
|
|
58
|
+
- `get(request: ApiFetch): Promise<T>` — Отправляет запрос методом `GET`.
|
|
59
|
+
- `post(request: ApiFetch): Promise<T>` — Отправляет запрос методом `POST`. Идеально для создания/сохранения сущностей.
|
|
60
|
+
- `put(request: ApiFetch): Promise<T>` — Отправляет запрос методом `PUT`. Применяется для обновления данных.
|
|
61
|
+
- `patch(request: ApiFetch): Promise<T>` — Отправляет запрос методом `PATCH`. Используется для частичного обновления данных ресурса.
|
|
62
|
+
- `delete(request: ApiFetch): Promise<T>` — Отправляет запрос методом `DELETE`. Применяется для удаления данных из системы.
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
- `request: ApiFetch` — конфигурационный объект запроса (содержащий `path`, `request` и т.д.).
|
|
66
|
-
|
|
67
|
-
**Возвращает:** `Promise<T>`
|
|
68
|
-
|
|
69
|
-
### `put`
|
|
70
|
-
|
|
71
|
-
Отправляет запрос методом `PUT`. Применяется для обновления данных.
|
|
72
|
-
|
|
73
|
-
**Параметры:**
|
|
74
|
-
- `request: ApiFetch` — конфигурационный объект запроса (содержащий `path`, `request` и т.д.).
|
|
75
|
-
|
|
76
|
-
**Возвращает:** `Promise<T>`
|
|
77
|
-
|
|
78
|
-
### `delete`
|
|
79
|
-
|
|
80
|
-
Отправляет запрос методом `DELETE`. Применяется для удаления данных из системы.
|
|
81
|
-
|
|
82
|
-
**Параметры:**
|
|
83
|
-
- `request: ApiFetch` — конфигурационный объект запроса (содержащий `path`, `request` и т.д.).
|
|
84
|
-
|
|
85
|
-
**Возвращает:** `Promise<T>`
|
|
86
|
-
|
|
87
|
-
## Методы получения инстансов
|
|
64
|
+
### Проверка
|
|
88
65
|
|
|
89
66
|
- `isLocalhost(): boolean` — Возвращает `true`, если код запущен на локальном сервере.
|
|
90
67
|
- `getStatus(): ApiStatus` — Возвращает менеджер `ApiStatus` для работы со статусом последнего запроса.
|
|
91
68
|
- `getResponse(): ApiResponse` — Возвращает менеджер эмуляции `ApiResponse`.
|
|
92
69
|
|
|
93
|
-
|
|
70
|
+
### Конфигурация
|
|
94
71
|
|
|
95
72
|
Методы для настройки API (поддерживают чейнинг вызовов, возвращают объект `ApiInstance`):
|
|
96
73
|
- `setHeaders(headers: Record<string, string>): this` — Устанавливает глобальные заголовки по умолчанию.
|
|
@@ -99,21 +76,23 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
99
76
|
- `setPreparation(callback: (apiFetch: ApiFetch) => Promise<void>): this` — Устанавливает хук, выполняемый перед каждым сетевым запросом.
|
|
100
77
|
- `setEnd(callback: (query: Response, apiFetch: ApiFetch) => Promise<ApiPreparationEnd>): this` — Устанавливает хук, выполняемый после получения ответа.
|
|
101
78
|
|
|
102
|
-
|
|
79
|
+
### Вспомогательные
|
|
103
80
|
|
|
104
|
-
- `getUrl(path: string, api?: boolean): string` — Формирует полный адрес к скрипту запроса с подстановкой
|
|
81
|
+
- `getUrl(path: string, api?: boolean): string` — Формирует полный адрес к скрипту запроса с подстановкой плейсхолдеров `{locale}`, `{country}`, `{language}`.
|
|
105
82
|
- `getBody(request?: ApiFetch['request'], method?: string): string | FormData | undefined` — Формирует данные для тела запроса.
|
|
106
83
|
- `getBodyForGet(request: ApiFetch['request'], path?: string, method?: string): string` — Формирует строку query-параметров для GET-запроса.
|
|
84
|
+
- `getHydration(): ApiHydration` — Возвращает менеджер гидратации.
|
|
85
|
+
- `getHydrationScript(): string` — Возвращает строковое представление данных гидратации для клиента.
|
|
107
86
|
|
|
108
87
|
## Объект ApiFetch
|
|
109
88
|
|
|
110
|
-
`ApiFetch` — главный конфигурационный объект, передаваемый в методы `request`, `get`, `post`, `put`, `delete`. Все поля опциональны:
|
|
89
|
+
`ApiFetch` — главный конфигурационный объект, передаваемый в методы `request`, `get`, `post`, `put`, `patch`, `delete`. Все поля опциональны:
|
|
111
90
|
|
|
112
91
|
- `path?: string` — путь к endpoint-скрипту относительно базового URL (например: `'users/list'`).
|
|
113
92
|
- `pathFull?: string` — полный URL запроса. Если указан, игнорирует `api` и `path`.
|
|
114
93
|
- `api?: boolean` — добавлять ли базовый URL перед `path`. По умолчанию: `true`.
|
|
115
|
-
- `method?: ApiMethod` — HTTP-метод (`'GET'`, `'POST'`, `'PUT'`, `'DELETE'`). По умолчанию: `'GET'`.
|
|
116
|
-
- `request?: FormData | Record<string, any> | string` — тело запроса (для POST/PUT) или query-параметры (
|
|
94
|
+
- `method?: ApiMethod` — HTTP-метод (`'GET'`, `'POST'`, `'PUT'`, `'PATCH'`, `'DELETE'`). По умолчанию: `'GET'`.
|
|
95
|
+
- `request?: FormData | Record<string, any> | string` — тело запроса (для POST/PUT/PATCH) или query-параметры (for GET). Передается как JSON или `FormData`.
|
|
117
96
|
- `headers?: Record<string, string> | null` — дополнительные заголовки запроса. `null` — отключить все заголовки.
|
|
118
97
|
- `type?: string` — значение `Content-Type`. По умолчанию: `'application/json;charset=UTF-8'`.
|
|
119
98
|
- `auth?: boolean` — добавить заголовки аутентификации.
|
|
@@ -125,8 +104,8 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
125
104
|
- `globalEnd?: boolean` — запускать ли глобальный хук `setEnd` после ответа. По умолчанию: `true`.
|
|
126
105
|
- `queryReturn?: (query: Response) => Promise<any>` — обработчик ответа вместо стандартного чтения JSON.
|
|
127
106
|
- `init?: RequestInit` — дополнительные опции для нативного `fetch()` (CORS, режим кеша и др.).
|
|
128
|
-
- `timeout?: number` — таймаут запроса в миллисекундах. По умолчанию: `16000
|
|
129
|
-
- `controller?: AbortController` — контроллер для отмены запроса.
|
|
107
|
+
- `timeout?: number` — таймаут запроса в миллисекундах. По умолчанию: `16000`мс (используется только если не передан `controller`).
|
|
108
|
+
- `controller?: AbortController` — контроллер для отмены запроса. Если передан, таймаут игнорируется.
|
|
130
109
|
- `retry?: number` — количество повторов при сбое.
|
|
131
110
|
- `retryDelay?: number` — базовая задержка между повторами в миллисекундах. По умолчанию: `64`мс.
|
|
132
111
|
|
|
@@ -245,7 +224,80 @@ api.setEnd(async (response, apiFetch) => {
|
|
|
245
224
|
- `globalPreparation: false` — пропустить выполнение хука `setPreparation`.
|
|
246
225
|
- `globalEnd: false` — пропустить выполнение хука `setEnd`.
|
|
247
226
|
|
|
248
|
-
##
|
|
227
|
+
## Гидратация
|
|
228
|
+
|
|
229
|
+
Гидратация — это механизм передачи данных, полученных в ходе серверного рендеринга (SSR), на сторону клиента. Это позволяет избежать повторного выполнения тех же самых сетевых запросов сразу после загрузки страницы в браузере, что значительно ускоряет отрисовку и снижает нагрузку на сервер.
|
|
230
|
+
|
|
231
|
+
### Как это работает
|
|
232
|
+
|
|
233
|
+
1. **На стороне сервера (SSR):**
|
|
234
|
+
- Все выполненные запросы (обычно метода `GET` с параметром `global: true`) автоматически сохраняются в списке гидратации.
|
|
235
|
+
- После завершения формирования страницы необходимо вызвать метод `api.getHydrationScript()` и вставить полученную строку в HTML-шаблон (обычно в конец тега `<body>`).
|
|
236
|
+
|
|
237
|
+
2. **На стороне клиента (Браузер):**
|
|
238
|
+
- При создании экземпляра `ApiInstance` он автоматически ищет на странице скрипт с данными гидратации.
|
|
239
|
+
- Найденные данные загружаются в систему и подставляются вместо первого вызова аналогичных запросов.
|
|
240
|
+
- Таким образом, клиентский код получает данные мгновенно, не дожидаясь ответа от сети.
|
|
241
|
+
|
|
242
|
+
### Пример использования (SSR)
|
|
243
|
+
|
|
244
|
+
```javascript
|
|
245
|
+
// На сервере
|
|
246
|
+
const api = new ApiInstance();
|
|
247
|
+
await api.get({ path: 'settings' });
|
|
248
|
+
|
|
249
|
+
// В шаблоне страницы (например, в конце body)
|
|
250
|
+
// Метод вернет строку: <script id="__ui:api:hydration:id__" type="application/json">[...]</script>
|
|
251
|
+
const hydrationScript = api.getHydrationScript();
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
## Кэширование
|
|
256
|
+
|
|
257
|
+
Библиотека предоставляет встроенный механизм кэширования ответов, который позволяет сохранять результаты запросов в памяти или во внешнем хранилище (например, `LocalStorage`).
|
|
258
|
+
|
|
259
|
+
### Основные возможности
|
|
260
|
+
|
|
261
|
+
- **Время жизни (TTL)** — для каждого запроса можно указать время актуальности кэша в секундах.
|
|
262
|
+
- **Внешние хранилища** — возможность интеграции с любым асинхронным хранилищем данных.
|
|
263
|
+
- **Автоматическая очистка** — старые данные удаляются из памяти при превышении лимитов.
|
|
264
|
+
|
|
265
|
+
### Настройка внешнего хранилища
|
|
266
|
+
|
|
267
|
+
По умолчанию кэш работает только в оперативной памяти и сбрасывается при перезагрузке страницы. Чтобы сохранять данные надолго, необходимо инициализировать `ApiCache` своими слушателями (например, используя `LocalStorage` или `IndexedDB`):
|
|
268
|
+
|
|
269
|
+
```javascript
|
|
270
|
+
import { ApiCache, DataStorage } from '@dxtmisha/functional';
|
|
271
|
+
|
|
272
|
+
// Пример инициализации с использованием LocalStorage через обертку DataStorage
|
|
273
|
+
ApiCache.init(
|
|
274
|
+
async (key) => DataStorage.get(key),
|
|
275
|
+
async (key, value) => {
|
|
276
|
+
DataStorage.set(key, value);
|
|
277
|
+
return true;
|
|
278
|
+
},
|
|
279
|
+
async (key) => {
|
|
280
|
+
DataStorage.remove(key);
|
|
281
|
+
return true;
|
|
282
|
+
}
|
|
283
|
+
);
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### Использование в запросах
|
|
287
|
+
|
|
288
|
+
Для включения кэширования достаточно передать время в секундах в поле `cache` объекта `ApiFetch`:
|
|
289
|
+
|
|
290
|
+
```javascript
|
|
291
|
+
// Кэшировать ответ на 1 час (3600 секунд)
|
|
292
|
+
const data = await api.get({
|
|
293
|
+
path: 'catalog/list',
|
|
294
|
+
cache: 3600
|
|
295
|
+
});
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
Если данные есть в кэше и их время жизни не истекло, библиотека вернет их мгновенно, не выполняя реальный запрос к серверу.
|
|
299
|
+
|
|
300
|
+
## Эмуляция ответов
|
|
249
301
|
|
|
250
302
|
Менеджер эмуляции `ApiResponse` (доступен через `api.getResponse()`) позволяет настраивать мок-ответы для определенных путей — это невероятно полезно при разработке UI без готового Backend API или для написания тестов.
|
|
251
303
|
|
|
@@ -255,7 +307,7 @@ api.setEnd(async (response, apiFetch) => {
|
|
|
255
307
|
|
|
256
308
|
**Важные поля `ApiResponseItem`:**
|
|
257
309
|
- `path` — Строка (точное совпадение) или Регулярное выражение (`RegExp`) для перехвата пути.
|
|
258
|
-
- `method` — HTTP метод (`ApiMethodItem.get`, `post` и т.д.).
|
|
310
|
+
- `method` — HTTP метод (`ApiMethodItem.get`, `post`, `put`, `patch` и т.д.).
|
|
259
311
|
- `request` — (Опционально) Фильтр по телу запроса. Можно использовать специальный маркер `'*any'`, чтобы перехватывать любые данные.
|
|
260
312
|
- `response` — Статический объект с данными ответа _или_ функция `(request) => any`, генерирующая ответ динамически на основе параметров запроса.
|
|
261
313
|
- `disable` — (Опционально) Отключить этот мок (boolean или callback).
|