@dxtmisha/wiki 0.39.7 → 0.56.0
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-DblGXmzD.js → defineProperty-149Ahniv.js} +4 -4
- package/dist/library.js +1 -1
- package/dist/media/descriptions/wikiDescriptionsArea.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsClientOnly.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsContainer.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsHeader.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsPageArea.d.ts +7 -0
- package/dist/media/mdx/Area/wikiMdxArea.d.ts +7 -0
- package/dist/media/mdx/ClientOnly/wikiMdxClientOnly.d.ts +7 -0
- package/dist/media/mdx/Container/wikiMdxContainer.d.ts +7 -0
- package/dist/media/mdx/Header/wikiMdxHeader.d.ts +7 -0
- package/dist/media/mdx/PageArea/wikiMdxPageArea.d.ts +7 -0
- package/dist/media.d.ts +1 -1
- package/dist/media.js +127 -68
- package/dist/storybook.js +2707 -1841
- package/dist/{wikiDescriptions-Cv4WzSNL.js → wikiDescriptions-7XaHU3Yk.js} +182 -0
- package/package.json +1 -1
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.en.mdx +43 -0
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.ru.mdx +43 -0
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.vi.mdx +41 -0
- package/src/media/functional/functional/composables/useApiRef/useApiRef.en.mdx +20 -4
- package/src/media/functional/functional/composables/useApiRef/useApiRef.ru.mdx +21 -3
- package/src/media/functional/functional/composables/useApiRef/useApiRef.vi.mdx +20 -2
- package/src/media/functional/functional/functions/computedAsync/computedAsync.en.mdx +8 -0
- package/src/media/functional/functional/functions/computedAsync/computedAsync.ru.mdx +8 -0
- package/src/media/functional/functional/functions/computedAsync/computedAsync.vi.mdx +8 -0
- package/src/media/functional/functional/functions/computedEternity/computedEternity.en.mdx +8 -0
- package/src/media/functional/functional/functions/computedEternity/computedEternity.ru.mdx +8 -0
- package/src/media/functional/functional/functions/computedEternity/computedEternity.vi.mdx +8 -0
- 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 +57 -54
- package/src/media/functional/functional-basic/classes/Api/Api.ru.mdx +57 -54
- package/src/media/functional/functional-basic/classes/Api/Api.vi.mdx +57 -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 +106 -51
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.ru.mdx +107 -52
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.vi.mdx +103 -49
- 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 +59 -21
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.ru.mdx +63 -25
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.vi.mdx +64 -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 +178 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.ru.mdx +178 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.vi.mdx +178 -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/Meta/Meta.en.mdx +16 -0
- package/src/media/functional/functional-basic/classes/Meta/Meta.ru.mdx +16 -0
- package/src/media/functional/functional-basic/classes/Meta/Meta.vi.mdx +17 -1
- package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.en.mdx +9 -0
- package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.ru.mdx +9 -0
- package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.vi.mdx +9 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.en.mdx +79 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.ru.mdx +79 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.vi.mdx +79 -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/functional-basic/icons/icons.en.mdx +3 -0
- package/src/media/functional/functional-basic/icons/icons.ru.mdx +3 -0
- package/src/media/functional/functional-basic/icons/icons.vi.mdx +3 -0
- package/src/media/functional/nitro-basic/functions/getInject.en.mdx +27 -0
- package/src/media/functional/nitro-basic/functions/getInject.ru.mdx +27 -0
- package/src/media/functional/nitro-basic/functions/getInject.vi.mdx +20 -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
|
@@ -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.
|
|
@@ -98,22 +75,26 @@ Methods to configure the API (support chaining, returning the `ApiInstance` obje
|
|
|
98
75
|
- `setUrl(url: string): this` — Overwrites generic target URL configurations prefix points.
|
|
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.
|
|
78
|
+
- `setOrigin(origin: string): this` — Sets the origin (protocol and domain) for the base URL.
|
|
101
79
|
|
|
102
|
-
|
|
80
|
+
### Auxiliary
|
|
103
81
|
|
|
104
|
-
- `getUrl(path: string, api?: boolean): string` — Generates the full target URL referencing the script, handling
|
|
82
|
+
- `getUrl(path: string, api?: boolean): string` — Generates the full target URL referencing the script, handling `{locale}`, `{country}`, `{language}` placeholder substitution.
|
|
83
|
+
- `getOrigin(): string` — Returns the base origin URL combined with the API path.
|
|
105
84
|
- `getBody(request?: ApiFetch['request'], method?: string): string | FormData | undefined` — Creates data to be passed into the request physical body.
|
|
106
85
|
- `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.
|
|
86
|
+
- `getHydration(): ApiHydration` — Returns the hydration manager.
|
|
87
|
+
- `getHydrationScript(): string` — Returns a string representation of the hydration data for the client.
|
|
107
88
|
|
|
108
89
|
## ApiFetch Object
|
|
109
90
|
|
|
110
|
-
`ApiFetch` is the main configuration object passed to all request methods (`request`, `get`, `post`, `put`, `delete`). All fields are optional:
|
|
91
|
+
`ApiFetch` is the main configuration object passed to all request methods (`request`, `get`, `post`, `put`, `patch`, `delete`). All fields are optional:
|
|
111
92
|
|
|
112
93
|
- `path?: string` — endpoint path relative to the base URL (e.g. `'users/list'`).
|
|
113
94
|
- `pathFull?: string` — full request URL. If provided, overrides `api` and `path`.
|
|
114
95
|
- `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`.
|
|
96
|
+
- `method?: ApiMethod` — HTTP method (`'GET'`, `'POST'`, `'PUT'`, `'PATCH'`, `'DELETE'`). Default: `'GET'`.
|
|
97
|
+
- `request?: FormData | Record<string, any> | string` — request body (for POST/PUT/PATCH) or query parameters (for GET). Serialized as JSON or `FormData`.
|
|
117
98
|
- `headers?: Record<string, string> | null` — additional request headers. Pass `null` to disable all headers.
|
|
118
99
|
- `type?: string` — `Content-Type` header value. Default: `'application/json;charset=UTF-8'`.
|
|
119
100
|
- `auth?: boolean` — include authentication headers.
|
|
@@ -125,10 +106,11 @@ Methods to configure the API (support chaining, returning the `ApiInstance` obje
|
|
|
125
106
|
- `globalEnd?: boolean` — whether to run the global `setEnd` hook after the response. Default: `true`.
|
|
126
107
|
- `queryReturn?: (query: Response) => Promise<any>` — custom response processor instead of the default JSON reader.
|
|
127
108
|
- `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.
|
|
109
|
+
- `timeout?: number` — request timeout in milliseconds. Default: `16000`ms (only used if `controller` is not provided).
|
|
110
|
+
- `controller?: AbortController` — controller for canceling the request. If provided, timeout is ignored.
|
|
130
111
|
- `retry?: number` — number of retries on failure.
|
|
131
|
-
- `retryDelay?: number` — base delay between retries in milliseconds. Default: `64`ms.
|
|
112
|
+
- `retryDelay?: number` — base delay between retries in milliseconds. Default: `64`ms. Jitter is used to prevent thundering herd problems.
|
|
113
|
+
- `endResetLimit?: number` — limit for recursive retries via `setEnd` with `reset: true`. Default: `8`.
|
|
132
114
|
|
|
133
115
|
## Response Data Structure
|
|
134
116
|
|
|
@@ -215,7 +197,7 @@ The `setEnd` method sets a callback function that is called after receiving a re
|
|
|
215
197
|
- `apiFetch: ApiFetch` — the parameters object with which the request was performed.
|
|
216
198
|
|
|
217
199
|
**Returns:** `Promise<ApiPreparationEnd>`. The result object can contain the following fields:
|
|
218
|
-
- `reset?: boolean` — if set to `true`, the library will abort the current chain and **execute the request again** (recursively) after a jittered delay (see `retryDelay`). The entire process of preparation and execution will be restarted. This is used for automatic handling of refreshed access rights.
|
|
200
|
+
- `reset?: boolean` — if set to `true`, the library will abort the current chain and **execute the request again** (recursively) after a jittered delay (see `retryDelay`). The entire process of preparation and execution will be restarted. This is used for automatic handling of refreshed access rights. This recursion is limited by `endResetLimit` (default: 8).
|
|
219
201
|
- `data?: any` — allows you to override the data returned by the API method. If this field is specified, the standard response reading mechanism (JSON/text) will be ignored.
|
|
220
202
|
|
|
221
203
|
```javascript
|
|
@@ -245,7 +227,80 @@ You can selectively disable global hooks in the `ApiFetch` object:
|
|
|
245
227
|
- `globalPreparation: false` — skip the `setPreparation` hook execution.
|
|
246
228
|
- `globalEnd: false` — skip the `setEnd` hook execution.
|
|
247
229
|
|
|
248
|
-
##
|
|
230
|
+
## Hydration
|
|
231
|
+
|
|
232
|
+
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.
|
|
233
|
+
|
|
234
|
+
### How it works
|
|
235
|
+
|
|
236
|
+
1. **Server-side (SSR):**
|
|
237
|
+
- All executed requests (usually `GET` methods with `global: true`) are automatically saved in the hydration list.
|
|
238
|
+
- 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).
|
|
239
|
+
|
|
240
|
+
2. **Client-side (Browser):**
|
|
241
|
+
- When an `ApiInstance` is created, it automatically looks for the hydration script on the page.
|
|
242
|
+
- Found data is loaded into the system and substituted for the first call of similar requests.
|
|
243
|
+
- Thus, the client code receives data instantly without waiting for a network response.
|
|
244
|
+
|
|
245
|
+
### Usage Example (SSR)
|
|
246
|
+
|
|
247
|
+
```javascript
|
|
248
|
+
// On the server
|
|
249
|
+
const api = new ApiInstance();
|
|
250
|
+
await api.get({ path: 'settings' });
|
|
251
|
+
|
|
252
|
+
// In the page template (e.g., at the end of body)
|
|
253
|
+
// The method returns a string: <script id="__ui:api:hydration:id__" type="application/json">[...]</script>
|
|
254
|
+
const hydrationScript = api.getHydrationScript();
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
## Caching
|
|
259
|
+
|
|
260
|
+
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`).
|
|
261
|
+
|
|
262
|
+
### Key Features
|
|
263
|
+
|
|
264
|
+
- **Time to Live (TTL)** — for each request, you can specify the cache validity time in seconds.
|
|
265
|
+
- **External Storage** — ability to integrate with any asynchronous data storage.
|
|
266
|
+
- **Automatic Cleanup** — old data is removed from memory when limits are exceeded.
|
|
267
|
+
|
|
268
|
+
### Setting up External Storage
|
|
269
|
+
|
|
270
|
+
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`):
|
|
271
|
+
|
|
272
|
+
```javascript
|
|
273
|
+
import { ApiCache, DataStorage } from '@dxtmisha/functional';
|
|
274
|
+
|
|
275
|
+
// Example of initialization using LocalStorage via DataStorage wrapper
|
|
276
|
+
ApiCache.init(
|
|
277
|
+
async (key) => DataStorage.get(key),
|
|
278
|
+
async (key, value) => {
|
|
279
|
+
DataStorage.set(key, value);
|
|
280
|
+
return true;
|
|
281
|
+
},
|
|
282
|
+
async (key) => {
|
|
283
|
+
DataStorage.remove(key);
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
);
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Usage in Requests
|
|
290
|
+
|
|
291
|
+
To enable caching, just pass the time in seconds in the `cache` field of the `ApiFetch` object:
|
|
292
|
+
|
|
293
|
+
```javascript
|
|
294
|
+
// Cache response for 1 hour (3600 seconds)
|
|
295
|
+
const data = await api.get({
|
|
296
|
+
path: 'catalog/list',
|
|
297
|
+
cache: 3600
|
|
298
|
+
});
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
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.
|
|
302
|
+
|
|
303
|
+
## Response Emulation
|
|
249
304
|
|
|
250
305
|
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
306
|
|
|
@@ -255,7 +310,7 @@ The `add` method accepts an `ApiResponseItem` object or an array of such objects
|
|
|
255
310
|
|
|
256
311
|
**Key `ApiResponseItem` fields:**
|
|
257
312
|
- `path` — String (exact match) or Regular Expression (`RegExp`) to intercept the request URL.
|
|
258
|
-
- `method` — HTTP method (`ApiMethodItem.get`, `post`, etc.).
|
|
313
|
+
- `method` — HTTP method (`ApiMethodItem.get`, `post`, `put`, `patch`, etc.).
|
|
259
314
|
- `request` — (Optional) Request body filter. You can use the special marker `'*any'` to bypass payload validation and capture all requests to this path.
|
|
260
315
|
- `response` — Static data object _or_ a dynamic factory function `(request) => any` that generates a response based on the incoming request payload.
|
|
261
316
|
- `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` — Устанавливает глобальные заголовки по умолчанию.
|
|
@@ -98,22 +75,26 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
98
75
|
- `setUrl(url: string): this` — Изменяет базовый URL путь для API скриптов.
|
|
99
76
|
- `setPreparation(callback: (apiFetch: ApiFetch) => Promise<void>): this` — Устанавливает хук, выполняемый перед каждым сетевым запросом.
|
|
100
77
|
- `setEnd(callback: (query: Response, apiFetch: ApiFetch) => Promise<ApiPreparationEnd>): this` — Устанавливает хук, выполняемый после получения ответа.
|
|
78
|
+
- `setOrigin(origin: string): this` — Устанавливает источник (протокол и домен) для формирования базового URL.
|
|
101
79
|
|
|
102
|
-
|
|
80
|
+
### Вспомогательные
|
|
103
81
|
|
|
104
|
-
- `getUrl(path: string, api?: boolean): string` — Формирует полный адрес к скрипту запроса с подстановкой
|
|
82
|
+
- `getUrl(path: string, api?: boolean): string` — Формирует полный адрес к скрипту запроса с подстановкой плейсхолдеров `{locale}`, `{country}`, `{language}`.
|
|
83
|
+
- `getOrigin(): string` — Возвращает базовый URL источника, объединенный с путем API.
|
|
105
84
|
- `getBody(request?: ApiFetch['request'], method?: string): string | FormData | undefined` — Формирует данные для тела запроса.
|
|
106
85
|
- `getBodyForGet(request: ApiFetch['request'], path?: string, method?: string): string` — Формирует строку query-параметров для GET-запроса.
|
|
86
|
+
- `getHydration(): ApiHydration` — Возвращает менеджер гидратации.
|
|
87
|
+
- `getHydrationScript(): string` — Возвращает строковое представление данных гидратации для клиента.
|
|
107
88
|
|
|
108
89
|
## Объект ApiFetch
|
|
109
90
|
|
|
110
|
-
`ApiFetch` — главный конфигурационный объект, передаваемый в методы `request`, `get`, `post`, `put`, `delete`. Все поля опциональны:
|
|
91
|
+
`ApiFetch` — главный конфигурационный объект, передаваемый в методы `request`, `get`, `post`, `put`, `patch`, `delete`. Все поля опциональны:
|
|
111
92
|
|
|
112
93
|
- `path?: string` — путь к endpoint-скрипту относительно базового URL (например: `'users/list'`).
|
|
113
94
|
- `pathFull?: string` — полный URL запроса. Если указан, игнорирует `api` и `path`.
|
|
114
95
|
- `api?: boolean` — добавлять ли базовый URL перед `path`. По умолчанию: `true`.
|
|
115
|
-
- `method?: ApiMethod` — HTTP-метод (`'GET'`, `'POST'`, `'PUT'`, `'DELETE'`). По умолчанию: `'GET'`.
|
|
116
|
-
- `request?: FormData | Record<string, any> | string` — тело запроса (для POST/PUT) или query-параметры (
|
|
96
|
+
- `method?: ApiMethod` — HTTP-метод (`'GET'`, `'POST'`, `'PUT'`, `'PATCH'`, `'DELETE'`). По умолчанию: `'GET'`.
|
|
97
|
+
- `request?: FormData | Record<string, any> | string` — тело запроса (для POST/PUT/PATCH) или query-параметры (for GET). Передается как JSON или `FormData`.
|
|
117
98
|
- `headers?: Record<string, string> | null` — дополнительные заголовки запроса. `null` — отключить все заголовки.
|
|
118
99
|
- `type?: string` — значение `Content-Type`. По умолчанию: `'application/json;charset=UTF-8'`.
|
|
119
100
|
- `auth?: boolean` — добавить заголовки аутентификации.
|
|
@@ -125,10 +106,11 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
125
106
|
- `globalEnd?: boolean` — запускать ли глобальный хук `setEnd` после ответа. По умолчанию: `true`.
|
|
126
107
|
- `queryReturn?: (query: Response) => Promise<any>` — обработчик ответа вместо стандартного чтения JSON.
|
|
127
108
|
- `init?: RequestInit` — дополнительные опции для нативного `fetch()` (CORS, режим кеша и др.).
|
|
128
|
-
- `timeout?: number` — таймаут запроса в миллисекундах. По умолчанию: `16000
|
|
129
|
-
- `controller?: AbortController` — контроллер для отмены запроса.
|
|
109
|
+
- `timeout?: number` — таймаут запроса в миллисекундах. По умолчанию: `16000`мс (используется только если не передан `controller`).
|
|
110
|
+
- `controller?: AbortController` — контроллер для отмены запроса. Если передан, таймаут игнорируется.
|
|
130
111
|
- `retry?: number` — количество повторов при сбое.
|
|
131
|
-
- `retryDelay?: number` — базовая задержка между повторами в миллисекундах. По умолчанию: `64`мс.
|
|
112
|
+
- `retryDelay?: number` — базовая задержка между повторами в миллисекундах. По умолчанию: `64`мс. Используется алгоритм с джиттером для предотвращения лавинообразных запросов.
|
|
113
|
+
- `endResetLimit?: number` — лимит рекурсивных повторов через `setEnd` с `reset: true`. По умолчанию: `8`.
|
|
132
114
|
|
|
133
115
|
## Структура данных ответа
|
|
134
116
|
|
|
@@ -187,7 +169,7 @@ controller.abort()
|
|
|
187
169
|
Метод `setPreparation` устанавливает callback-функцию, которая вызывается непосредственно перед отправкой запроса на сервер (до выполнения нативного `fetch`).
|
|
188
170
|
|
|
189
171
|
**Особенности работы:**
|
|
190
|
-
- **Очередность исполнения**: Если одновременно запускается несколько запросов, класс гарантирует, что хук подготовки будет выполнен **последовательно**. Все последующие запросы будут ждать завершения текущего хука в режиме ожидания (с интервалом опроса
|
|
172
|
+
- **Очередность исполнения**: Если одновременно запускается несколько запросов, класс гарантирует, что хук подготовки будет выполнен **последовательно**. Все последующие запросы будут ждать завершения текущего хука в режиме ожидания (с интервалом опроса 16мс). Это предотвращает конфликты, например, при одновременном обновлении токена несколькими запросами.
|
|
191
173
|
- **Параметры**: Получает объект `apiFetch`, содержащий все текущие настройки запроса. Вы можете изменять этот объект (например, добавляя заголовки или модифицируя тело запроса).
|
|
192
174
|
- **Возвращает**: `Promise<void>`.
|
|
193
175
|
|
|
@@ -215,7 +197,7 @@ api.setPreparation(async (apiFetch) => {
|
|
|
215
197
|
- `apiFetch: ApiFetch` — объект параметров, с которыми был выполнен запрос.
|
|
216
198
|
|
|
217
199
|
**Возвращает:** `Promise<ApiPreparationEnd>`. Объект результата может содержать следующие поля:
|
|
218
|
-
- `reset?: boolean` — если установлено в `true`, библиотека прервет текущую цепочку и **выполнит запрос заново** (рекурсивно) через рандомизированную задержку (см. `retryDelay`). Весь процесс подготовки и выполнения будет запущен повторно. Используется для автоматической обработки обновленных прав доступа.
|
|
200
|
+
- `reset?: boolean` — если установлено в `true`, библиотека прервет текущую цепочку и **выполнит запрос заново** (рекурсивно) через рандомизированную задержку (см. `retryDelay`). Весь процесс подготовки и выполнения будет запущен повторно. Используется для автоматической обработки обновленных прав доступа. Лимит таких повторов ограничен параметром `endResetLimit` (по умолчанию 8).
|
|
219
201
|
- `data?: any` — позволяет переопределить данные, которые вернет метод API. Если это поле указано, стандартный механизм чтения ответа (JSON/текст) будет проигнорирован.
|
|
220
202
|
|
|
221
203
|
```javascript
|
|
@@ -245,7 +227,80 @@ api.setEnd(async (response, apiFetch) => {
|
|
|
245
227
|
- `globalPreparation: false` — пропустить выполнение хука `setPreparation`.
|
|
246
228
|
- `globalEnd: false` — пропустить выполнение хука `setEnd`.
|
|
247
229
|
|
|
248
|
-
##
|
|
230
|
+
## Гидратация
|
|
231
|
+
|
|
232
|
+
Гидратация — это механизм передачи данных, полученных в ходе серверного рендеринга (SSR), на сторону клиента. Это позволяет избежать повторного выполнения тех же самых сетевых запросов сразу после загрузки страницы в браузере, что значительно ускоряет отрисовку и снижает нагрузку на сервер.
|
|
233
|
+
|
|
234
|
+
### Как это работает
|
|
235
|
+
|
|
236
|
+
1. **На стороне сервера (SSR):**
|
|
237
|
+
- Все выполненные запросы (обычно метода `GET` с параметром `global: true`) автоматически сохраняются в списке гидратации.
|
|
238
|
+
- После завершения формирования страницы необходимо вызвать метод `api.getHydrationScript()` и вставить полученную строку в HTML-шаблон (обычно в конец тега `<body>`).
|
|
239
|
+
|
|
240
|
+
2. **На стороне клиента (Браузер):**
|
|
241
|
+
- При создании экземпляра `ApiInstance` он автоматически ищет на странице скрипт с данными гидратации.
|
|
242
|
+
- Найденные данные загружаются в систему и подставляются вместо первого вызова аналогичных запросов.
|
|
243
|
+
- Таким образом, клиентский код получает данные мгновенно, не дожидаясь ответа от сети.
|
|
244
|
+
|
|
245
|
+
### Пример использования (SSR)
|
|
246
|
+
|
|
247
|
+
```javascript
|
|
248
|
+
// На сервере
|
|
249
|
+
const api = new ApiInstance();
|
|
250
|
+
await api.get({ path: 'settings' });
|
|
251
|
+
|
|
252
|
+
// В шаблоне страницы (например, в конце body)
|
|
253
|
+
// Метод вернет строку: <script id="__ui:api:hydration:id__" type="application/json">[...]</script>
|
|
254
|
+
const hydrationScript = api.getHydrationScript();
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
## Кэширование
|
|
259
|
+
|
|
260
|
+
Библиотека предоставляет встроенный механизм кэширования ответов, который позволяет сохранять результаты запросов в памяти или во внешнем хранилище (например, `LocalStorage`).
|
|
261
|
+
|
|
262
|
+
### Основные возможности
|
|
263
|
+
|
|
264
|
+
- **Время жизни (TTL)** — для каждого запроса можно указать время актуальности кэша в секундах.
|
|
265
|
+
- **Внешние хранилища** — возможность интеграции с любым асинхронным хранилищем данных.
|
|
266
|
+
- **Автоматическая очистка** — старые данные удаляются из памяти при превышении лимитов.
|
|
267
|
+
|
|
268
|
+
### Настройка внешнего хранилища
|
|
269
|
+
|
|
270
|
+
По умолчанию кэш работает только в оперативной памяти и сбрасывается при перезагрузке страницы. Чтобы сохранять данные надолго, необходимо инициализировать `ApiCache` своими слушателями (например, используя `LocalStorage` или `IndexedDB`):
|
|
271
|
+
|
|
272
|
+
```javascript
|
|
273
|
+
import { ApiCache, DataStorage } from '@dxtmisha/functional';
|
|
274
|
+
|
|
275
|
+
// Пример инициализации с использованием LocalStorage через обертку DataStorage
|
|
276
|
+
ApiCache.init(
|
|
277
|
+
async (key) => DataStorage.get(key),
|
|
278
|
+
async (key, value) => {
|
|
279
|
+
DataStorage.set(key, value);
|
|
280
|
+
return true;
|
|
281
|
+
},
|
|
282
|
+
async (key) => {
|
|
283
|
+
DataStorage.remove(key);
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
);
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Использование в запросах
|
|
290
|
+
|
|
291
|
+
Для включения кэширования достаточно передать время в секундах в поле `cache` объекта `ApiFetch`:
|
|
292
|
+
|
|
293
|
+
```javascript
|
|
294
|
+
// Кэшировать ответ на 1 час (3600 секунд)
|
|
295
|
+
const data = await api.get({
|
|
296
|
+
path: 'catalog/list',
|
|
297
|
+
cache: 3600
|
|
298
|
+
});
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
Если данные есть в кэше и их время жизни не истекло, библиотека вернет их мгновенно, не выполняя реальный запрос к серверу.
|
|
302
|
+
|
|
303
|
+
## Эмуляция ответов
|
|
249
304
|
|
|
250
305
|
Менеджер эмуляции `ApiResponse` (доступен через `api.getResponse()`) позволяет настраивать мок-ответы для определенных путей — это невероятно полезно при разработке UI без готового Backend API или для написания тестов.
|
|
251
306
|
|
|
@@ -255,7 +310,7 @@ api.setEnd(async (response, apiFetch) => {
|
|
|
255
310
|
|
|
256
311
|
**Важные поля `ApiResponseItem`:**
|
|
257
312
|
- `path` — Строка (точное совпадение) или Регулярное выражение (`RegExp`) для перехвата пути.
|
|
258
|
-
- `method` — HTTP метод (`ApiMethodItem.get`, `post` и т.д.).
|
|
313
|
+
- `method` — HTTP метод (`ApiMethodItem.get`, `post`, `put`, `patch` и т.д.).
|
|
259
314
|
- `request` — (Опционально) Фильтр по телу запроса. Можно использовать специальный маркер `'*any'`, чтобы перехватывать любые данные.
|
|
260
315
|
- `response` — Статический объект с данными ответа _или_ функция `(request) => any`, генерирующая ответ динамически на основе параметров запроса.
|
|
261
316
|
- `disable` — (Опционально) Отключить этот мок (boolean или callback).
|