@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.
Files changed (227) hide show
  1. package/dist/{defineProperty-DblGXmzD.js → defineProperty-149Ahniv.js} +4 -4
  2. package/dist/library.js +1 -1
  3. package/dist/media/descriptions/wikiDescriptionsArea.d.ts +7 -0
  4. package/dist/media/descriptions/wikiDescriptionsClientOnly.d.ts +7 -0
  5. package/dist/media/descriptions/wikiDescriptionsContainer.d.ts +7 -0
  6. package/dist/media/descriptions/wikiDescriptionsHeader.d.ts +7 -0
  7. package/dist/media/descriptions/wikiDescriptionsPageArea.d.ts +7 -0
  8. package/dist/media/mdx/Area/wikiMdxArea.d.ts +7 -0
  9. package/dist/media/mdx/ClientOnly/wikiMdxClientOnly.d.ts +7 -0
  10. package/dist/media/mdx/Container/wikiMdxContainer.d.ts +7 -0
  11. package/dist/media/mdx/Header/wikiMdxHeader.d.ts +7 -0
  12. package/dist/media/mdx/PageArea/wikiMdxPageArea.d.ts +7 -0
  13. package/dist/media.d.ts +1 -1
  14. package/dist/media.js +127 -68
  15. package/dist/storybook.js +2707 -1841
  16. package/dist/{wikiDescriptions-Cv4WzSNL.js → wikiDescriptions-7XaHU3Yk.js} +182 -0
  17. package/package.json +1 -1
  18. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.en.mdx +43 -0
  19. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.ru.mdx +43 -0
  20. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.vi.mdx +41 -0
  21. package/src/media/functional/functional/composables/useApiRef/useApiRef.en.mdx +20 -4
  22. package/src/media/functional/functional/composables/useApiRef/useApiRef.ru.mdx +21 -3
  23. package/src/media/functional/functional/composables/useApiRef/useApiRef.vi.mdx +20 -2
  24. package/src/media/functional/functional/functions/computedAsync/computedAsync.en.mdx +8 -0
  25. package/src/media/functional/functional/functions/computedAsync/computedAsync.ru.mdx +8 -0
  26. package/src/media/functional/functional/functions/computedAsync/computedAsync.vi.mdx +8 -0
  27. package/src/media/functional/functional/functions/computedEternity/computedEternity.en.mdx +8 -0
  28. package/src/media/functional/functional/functions/computedEternity/computedEternity.ru.mdx +8 -0
  29. package/src/media/functional/functional/functions/computedEternity/computedEternity.vi.mdx +8 -0
  30. package/src/media/functional/functional-basic/api/api.en.mdx +45 -0
  31. package/src/media/functional/functional-basic/api/api.ru.mdx +45 -0
  32. package/src/media/functional/functional-basic/api/api.vi.mdx +45 -0
  33. package/src/media/functional/functional-basic/classes/Api/Api.en.mdx +57 -54
  34. package/src/media/functional/functional-basic/classes/Api/Api.ru.mdx +57 -54
  35. package/src/media/functional/functional-basic/classes/Api/Api.vi.mdx +57 -54
  36. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.en.mdx +111 -0
  37. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.ru.mdx +111 -0
  38. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.vi.mdx +111 -0
  39. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.en.mdx +32 -0
  40. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.ru.mdx +32 -0
  41. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.vi.mdx +32 -0
  42. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.en.mdx +24 -28
  43. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.ru.mdx +24 -28
  44. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.vi.mdx +24 -28
  45. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.en.mdx +28 -14
  46. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.ru.mdx +33 -19
  47. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.vi.mdx +33 -19
  48. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.en.mdx +56 -0
  49. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.ru.mdx +56 -0
  50. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.vi.mdx +55 -0
  51. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.en.mdx +106 -51
  52. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.ru.mdx +107 -52
  53. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.vi.mdx +103 -49
  54. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.en.mdx +44 -26
  55. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.ru.mdx +45 -27
  56. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.vi.mdx +44 -26
  57. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.en.mdx +59 -21
  58. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.ru.mdx +63 -25
  59. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.vi.mdx +64 -26
  60. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.en.mdx +29 -32
  61. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.ru.mdx +33 -36
  62. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.vi.mdx +33 -36
  63. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.en.mdx +34 -53
  64. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.ru.mdx +33 -52
  65. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.vi.mdx +39 -58
  66. package/src/media/functional/functional-basic/classes/Cache/Cache.en.mdx +7 -4
  67. package/src/media/functional/functional-basic/classes/Cache/Cache.ru.mdx +7 -4
  68. package/src/media/functional/functional-basic/classes/Cache/Cache.vi.mdx +28 -25
  69. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.en.mdx +45 -53
  70. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.ru.mdx +46 -54
  71. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.vi.mdx +47 -55
  72. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.en.mdx +13 -1
  73. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.ru.mdx +13 -1
  74. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.vi.mdx +13 -0
  75. package/src/media/functional/functional-basic/classes/Cookie/Cookie.en.mdx +88 -44
  76. package/src/media/functional/functional-basic/classes/Cookie/Cookie.ru.mdx +88 -44
  77. package/src/media/functional/functional-basic/classes/Cookie/Cookie.vi.mdx +85 -41
  78. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.en.mdx +43 -22
  79. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.ru.mdx +46 -25
  80. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.vi.mdx +43 -22
  81. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.en.mdx +84 -0
  82. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.ru.mdx +84 -0
  83. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.vi.mdx +100 -0
  84. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.en.mdx +178 -0
  85. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.ru.mdx +178 -0
  86. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.vi.mdx +178 -0
  87. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.en.mdx +32 -25
  88. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.ru.mdx +32 -25
  89. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.vi.mdx +32 -27
  90. package/src/media/functional/functional-basic/classes/Datetime/Datetime.en.mdx +36 -4
  91. package/src/media/functional/functional-basic/classes/Datetime/Datetime.ru.mdx +36 -4
  92. package/src/media/functional/functional-basic/classes/Datetime/Datetime.vi.mdx +36 -4
  93. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.en.mdx +101 -70
  94. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.ru.mdx +100 -69
  95. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.vi.mdx +101 -70
  96. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.en.mdx +46 -42
  97. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.ru.mdx +46 -42
  98. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.vi.mdx +46 -42
  99. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.en.mdx +44 -96
  100. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.ru.mdx +44 -96
  101. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.vi.mdx +44 -96
  102. package/src/media/functional/functional-basic/classes/EventItem/EventItem.en.mdx +49 -28
  103. package/src/media/functional/functional-basic/classes/EventItem/EventItem.ru.mdx +21 -0
  104. package/src/media/functional/functional-basic/classes/EventItem/EventItem.vi.mdx +63 -42
  105. package/src/media/functional/functional-basic/classes/Formatters/Formatters.en.mdx +97 -109
  106. package/src/media/functional/functional-basic/classes/Formatters/Formatters.ru.mdx +86 -98
  107. package/src/media/functional/functional-basic/classes/Formatters/Formatters.vi.mdx +99 -111
  108. package/src/media/functional/functional-basic/classes/Geo/Geo.en.mdx +3 -3
  109. package/src/media/functional/functional-basic/classes/Geo/Geo.ru.mdx +5 -5
  110. package/src/media/functional/functional-basic/classes/Geo/Geo.vi.mdx +5 -5
  111. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.en.mdx +83 -40
  112. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.ru.mdx +83 -40
  113. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.vi.mdx +87 -44
  114. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.en.mdx +81 -0
  115. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.ru.mdx +81 -0
  116. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.vi.mdx +81 -0
  117. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.en.mdx +56 -105
  118. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.ru.mdx +53 -102
  119. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.vi.mdx +55 -105
  120. package/src/media/functional/functional-basic/classes/Hash/Hash.en.mdx +18 -7
  121. package/src/media/functional/functional-basic/classes/Hash/Hash.ru.mdx +18 -7
  122. package/src/media/functional/functional-basic/classes/Hash/Hash.vi.mdx +18 -7
  123. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.en.mdx +54 -0
  124. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.ru.mdx +54 -0
  125. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.vi.mdx +54 -0
  126. package/src/media/functional/functional-basic/classes/Meta/Meta.en.mdx +16 -0
  127. package/src/media/functional/functional-basic/classes/Meta/Meta.ru.mdx +16 -0
  128. package/src/media/functional/functional-basic/classes/Meta/Meta.vi.mdx +17 -1
  129. package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.en.mdx +9 -0
  130. package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.ru.mdx +9 -0
  131. package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.vi.mdx +9 -0
  132. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.en.mdx +79 -0
  133. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.ru.mdx +79 -0
  134. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.vi.mdx +79 -0
  135. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.en.mdx +50 -0
  136. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.ru.mdx +50 -0
  137. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.vi.mdx +50 -0
  138. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.en.mdx +131 -0
  139. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.ru.mdx +131 -0
  140. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.vi.mdx +131 -0
  141. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.en.mdx +97 -0
  142. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.ru.mdx +97 -0
  143. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.vi.mdx +97 -0
  144. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.en.mdx +13 -5
  145. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.ru.mdx +13 -5
  146. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.vi.mdx +13 -5
  147. package/src/media/functional/functional-basic/functions/anyToString/anyToString.en.mdx +37 -19
  148. package/src/media/functional/functional-basic/functions/anyToString/anyToString.ru.mdx +37 -19
  149. package/src/media/functional/functional-basic/functions/anyToString/anyToString.vi.mdx +35 -17
  150. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.en.mdx +31 -19
  151. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.ru.mdx +31 -19
  152. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.vi.mdx +32 -20
  153. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.en.mdx +29 -15
  154. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.ru.mdx +28 -14
  155. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.vi.mdx +28 -14
  156. package/src/media/functional/functional-basic/functions/capitalize/capitalize.en.mdx +7 -3
  157. package/src/media/functional/functional-basic/functions/capitalize/capitalize.ru.mdx +7 -3
  158. package/src/media/functional/functional-basic/functions/capitalize/capitalize.vi.mdx +7 -3
  159. package/src/media/functional/functional-basic/functions/copyObject/copyObject.en.mdx +17 -13
  160. package/src/media/functional/functional-basic/functions/copyObject/copyObject.ru.mdx +17 -13
  161. package/src/media/functional/functional-basic/functions/copyObject/copyObject.vi.mdx +17 -13
  162. package/src/media/functional/functional-basic/functions/createElement/createElement.en.mdx +2 -0
  163. package/src/media/functional/functional-basic/functions/createElement/createElement.ru.mdx +2 -0
  164. package/src/media/functional/functional-basic/functions/createElement/createElement.vi.mdx +2 -0
  165. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.en.mdx +1 -3
  166. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.ru.mdx +1 -3
  167. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.vi.mdx +1 -3
  168. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.en.mdx +13 -10
  169. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.ru.mdx +14 -11
  170. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.vi.mdx +12 -9
  171. package/src/media/functional/functional-basic/functions/executePromise/executePromise.en.mdx +14 -13
  172. package/src/media/functional/functional-basic/functions/executePromise/executePromise.ru.mdx +15 -14
  173. package/src/media/functional/functional-basic/functions/executePromise/executePromise.vi.mdx +14 -13
  174. package/src/media/functional/functional-basic/functions/forEach/forEach.en.mdx +1 -1
  175. package/src/media/functional/functional-basic/functions/forEach/forEach.ru.mdx +1 -1
  176. package/src/media/functional/functional-basic/functions/forEach/forEach.vi.mdx +1 -1
  177. package/src/media/functional/functional-basic/functions/frame/frame.en.mdx +7 -4
  178. package/src/media/functional/functional-basic/functions/frame/frame.ru.mdx +6 -3
  179. package/src/media/functional/functional-basic/functions/frame/frame.vi.mdx +7 -4
  180. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.en.mdx +34 -0
  181. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.ru.mdx +34 -0
  182. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.vi.mdx +35 -0
  183. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.en.mdx +2 -0
  184. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.ru.mdx +2 -0
  185. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.vi.mdx +2 -0
  186. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.en.mdx +21 -0
  187. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.ru.mdx +21 -0
  188. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.vi.mdx +21 -0
  189. package/src/media/functional/functional-basic/functions/getElementId/getElementId.en.mdx +17 -3
  190. package/src/media/functional/functional-basic/functions/getElementId/getElementId.ru.mdx +17 -3
  191. package/src/media/functional/functional-basic/functions/getElementId/getElementId.vi.mdx +18 -4
  192. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.en.mdx +31 -0
  193. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.ru.mdx +31 -0
  194. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.vi.mdx +31 -0
  195. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.en.mdx +25 -0
  196. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.ru.mdx +25 -0
  197. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.vi.mdx +25 -0
  198. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.en.mdx +11 -4
  199. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.ru.mdx +14 -7
  200. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.vi.mdx +13 -6
  201. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.en.mdx +3 -2
  202. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.ru.mdx +3 -2
  203. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.vi.mdx +3 -2
  204. package/src/media/functional/functional-basic/functions/toNumber/toNumber.en.mdx +25 -9
  205. package/src/media/functional/functional-basic/functions/toNumber/toNumber.ru.mdx +25 -9
  206. package/src/media/functional/functional-basic/functions/toNumber/toNumber.vi.mdx +25 -9
  207. package/src/media/functional/functional-basic/functions/toString/toString.en.mdx +28 -0
  208. package/src/media/functional/functional-basic/functions/toString/toString.ru.mdx +28 -0
  209. package/src/media/functional/functional-basic/functions/toString/toString.vi.mdx +28 -0
  210. package/src/media/functional/functional-basic/icons/icons.en.mdx +3 -0
  211. package/src/media/functional/functional-basic/icons/icons.ru.mdx +3 -0
  212. package/src/media/functional/functional-basic/icons/icons.vi.mdx +3 -0
  213. package/src/media/functional/nitro-basic/functions/getInject.en.mdx +27 -0
  214. package/src/media/functional/nitro-basic/functions/getInject.ru.mdx +27 -0
  215. package/src/media/functional/nitro-basic/functions/getInject.vi.mdx +20 -0
  216. package/src/media/functional/ui/about/about.en.mdx +45 -0
  217. package/src/media/functional/ui/about/about.ru.mdx +45 -0
  218. package/src/media/functional/ui/about/about.vi.mdx +45 -0
  219. package/src/media/functional/ui/component/component.en.mdx +104 -0
  220. package/src/media/functional/ui/component/component.ru.mdx +106 -0
  221. package/src/media/functional/ui/component/component.vi.mdx +104 -0
  222. package/src/media/functional/ui/setup/setup.en.mdx +72 -0
  223. package/src/media/functional/ui/setup/setup.ru.mdx +72 -0
  224. package/src/media/functional/ui/setup/setup.vi.mdx +72 -0
  225. package/src/media/functional/ui/wiki-data.en.mdx +114 -0
  226. package/src/media/functional/ui/wiki-data.ru.mdx +114 -0
  227. package/src/media/functional/ui/wiki-data.vi.mdx +114 -0
@@ -0,0 +1,178 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/ru/functional-basic/Classes/CookieStorage - Хранилище Cookie'/>
4
+
5
+ # Класс CookieStorage
6
+
7
+ Класс для управления хранением cookie с поддержкой пользовательских слушателей. Предоставляет низкоуровневый интерфейс для работы с cookie в различных окружениях (DOM, SSR) с автоматическим парсингом типов и безопасной обработкой данных.
8
+
9
+ Включает тесную интеграцию с `CookieBlock` для контроля доступа и поддерживает декодирование URL-encoded значений.
10
+
11
+ ## Ключевые особенности
12
+
13
+ - **Гибкое хранение** — поддержка памяти процесса и внешних механизмов хранения через слушатели
14
+ - **Автоматическое преобразование** — интеллектуальное преобразование строковых значений в соответствующие типы данных
15
+ - **Интеграция с блокировкой** — уважает глобальную блокировку записи через `CookieBlock`
16
+ - **Безопасность окружения** — автоматическое определение DOM окружения и адаптация поведения
17
+ - **URL-декодирование** — автоматическое декодирование имен и значений при чтении из DOM
18
+
19
+ ## Статические методы
20
+
21
+ ### Действие
22
+
23
+ #### `get`
24
+
25
+ Получает значение cookie по имени с автоматическим преобразованием типов. Если значение не существует и указано значение по умолчанию, оно будет установлено и сохранено.
26
+
27
+ **Параметры:**
28
+ - `name: string` — имя cookie
29
+ - `defaultValue?: T | (() => T)` — значение по умолчанию или функция, возвращающая значение
30
+
31
+ **Возвращает:** `T | undefined` — преобразованное значение cookie или значение по умолчанию
32
+
33
+ #### `set`
34
+
35
+ Сохраняет значение cookie с указанными параметрами и автоматическим обновлением в памяти и DOM. Если активна блокировка через `CookieBlock`, значение сохраняется только в памяти.
36
+
37
+ **Параметры:**
38
+ - `name: string` — имя cookie
39
+ - `value: T | (() => T)` — значение или функция, возвращающая значение
40
+ - `options?: CookieOptions` — дополнительные параметры cookie
41
+
42
+ **Возвращает:** `T` — сохраненное значение
43
+
44
+ #### `remove`
45
+
46
+ Удаляет cookie, устанавливая пустое значение и отрицательный срок действия. Эквивалентно вызову `set(name, '', { age: -1 })`.
47
+
48
+ **Параметры:**
49
+ - `name: string` — имя cookie
50
+
51
+ ### Конфигурация
52
+
53
+ - `init(getListener?, getListenerRaw?, setListener?)` — Инициализирует хранилище с пользовательскими слушателями для чтения и записи данных. Слушатель записи `setListener` принимает 4 аргумента: `(key, value, cookie, options)`.
54
+ - `reset()` — Сбрасывает хранилище, очищая все элементы в памяти и удаляя слушатели
55
+
56
+ ### Вспомогательные
57
+
58
+ - `update()` — Обновляет данные в памяти, парся значения из `document.cookie`
59
+
60
+ ## Типы
61
+
62
+ ### `CookieOptions`
63
+
64
+ Объект конфигурации для параметров cookie:
65
+
66
+ - `age?: number` — время жизни в секундах (атрибут max-age)
67
+ - `sameSite?: 'strict' | 'lax'` — политика SameSite
68
+ - `path?: string` — путь для cookie (по умолчанию `/`)
69
+ - `domain?: string` — домен для cookie
70
+ - `secure?: boolean` — если true, добавляет атрибут Secure
71
+ - `httpOnly?: boolean` — если true, добавляет атрибут HttpOnly (только для серверных слушателей)
72
+ - `partitioned?: boolean` — если true, добавляет атрибут Partitioned (CHIPS)
73
+ - `arguments?: string[] | Record<string, any>` — дополнительные директивы для строки cookie
74
+
75
+ ## Встроенное преобразование типов
76
+
77
+ `CookieStorage` автоматически преобразует строковые значения при чтении:
78
+
79
+ - `'undefined'` → `undefined`
80
+ - `'null'` → `null`
81
+ - `'true'` → `true`
82
+ - `'false'` → `false`
83
+ - `'123'` → `123` (число)
84
+ - `'{"key":"value"}'` → `{key: 'value'}` (объект JSON)
85
+
86
+ ## Примеры
87
+
88
+ ### Базовое использование
89
+
90
+ ```typescript
91
+ import { CookieStorage } from '@dxtmisha/functional-basic'
92
+
93
+ // Получение значения с дефолтным значением
94
+ const theme = CookieStorage.get<string>('theme', 'dark')
95
+
96
+ // Сохранение значения
97
+ CookieStorage.set('user', 'john', {
98
+ age: 3600,
99
+ sameSite: 'lax'
100
+ })
101
+
102
+ // Удаление
103
+ CookieStorage.remove('user')
104
+ ```
105
+
106
+ ### Инициализация с внешним хранилищем
107
+
108
+ ```typescript
109
+ import { CookieStorage } from '@dxtmisha/functional-basic'
110
+
111
+ CookieStorage.init(
112
+ (key) => myStorage.get(key),
113
+ undefined,
114
+ (key, value, cookie, options) => {
115
+ // cookie - это уже отформатированная строка типа "key=value; max-age=..."
116
+ myStorage.set(key, value, cookie, options)
117
+ }
118
+ )
119
+ ```
120
+
121
+ ### Инициализация для SSR (Raw)
122
+
123
+ ```typescript
124
+ import { CookieStorage } from '@dxtmisha/functional-basic'
125
+
126
+ // Для SSR получаем все куки в виде сырой строки
127
+ CookieStorage.init(
128
+ undefined,
129
+ () => request.headers.cookie
130
+ )
131
+ ```
132
+
133
+ ### Обновление и сброс
134
+
135
+ ```typescript
136
+ import { CookieStorage } from '@dxtmisha/functional-basic'
137
+
138
+ // Обновить данные в памяти из document.cookie
139
+ // Полезно, когда куки были установлены внешне
140
+ CookieStorage.update()
141
+
142
+ // Сбросить хранилище (очистить слушатели и данные в памяти)
143
+ // Полезно для тестирования или очистки
144
+ CookieStorage.reset()
145
+ ```
146
+
147
+ ### Полный рабочий процесс
148
+
149
+ ```typescript
150
+ import { CookieStorage } from '@dxtmisha/functional-basic'
151
+
152
+ // Инициализация с пользовательским хранилищем
153
+ CookieStorage.init(
154
+ (key) => redis.get(key),
155
+ undefined,
156
+ (key, value, cookie, options) => redis.set(key, value, cookie, options)
157
+ )
158
+
159
+ // Установка значения с параметрами
160
+ CookieStorage.set('user', 'john', {
161
+ age: 3600, // 1 час
162
+ sameSite: 'lax', // Политика SameSite
163
+ path: '/', // Путь
164
+ secure: true, // Только HTTPS
165
+ httpOnly: true, // Защита от XSS (для SSR)
166
+ arguments: ['Priority=High'] // Дополнительные директивы
167
+ })
168
+
169
+ // Получение значения с преобразованием типа
170
+ const user = CookieStorage.get<string>('user')
171
+
172
+ // Обновление из внешнего источника
173
+ CookieStorage.update()
174
+
175
+ // Очистка
176
+ CookieStorage.remove('user')
177
+ CookieStorage.reset()
178
+ ```
@@ -0,0 +1,178 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/vi/functional-basic/Classes/CookieStorage - Lưu trữ Cookie'/>
4
+
5
+ # Lớp CookieStorage
6
+
7
+ Lớp quản lý lưu trữ cookie với hỗ trợ người nghe tùy chỉnh. Cung cấp giao diện cấp thấp để làm việc với cookie trong các môi trường khác nhau (DOM, SSR) với phân tích tự động kiểu và xử lý dữ liệu an toàn.
8
+
9
+ Bao gồm tích hợp chặt chẽ với `CookieBlock` để kiểm soát truy cập và hỗ trợ giải mã các giá trị đã được mã hóa URL.
10
+
11
+ ## Các tính năng chính
12
+
13
+ - **Lưu trữ linh hoạt** — hỗ trợ bộ nhớ quy trình và cơ chế lưu trữ bên ngoài thông qua người nghe
14
+ - **Phân tích tự động** — chuyển đổi thông minh các giá trị chuỗi thành các loại dữ liệu tương ứng
15
+ - **Tích hợp chặn** — tôn trọng chặn ghi toàn cầu qua `CookieBlock`
16
+ - **Nhận thức môi trường** — tự động phát hiện môi trường DOM và thích ứng hành vi
17
+ - **Giải mã URL** — tự động giải mã tên và giá trị khi đọc từ DOM
18
+
19
+ ## Phương thức tĩnh
20
+
21
+ ### Hành động
22
+
23
+ #### `get`
24
+
25
+ Lấy giá trị cookie theo tên với chuyển đổi kiểu tự động. Nếu giá trị không tồn tại và có chỉ định giá trị mặc định, nó sẽ được thiết lập và lưu trữ.
26
+
27
+ **Tham số:**
28
+ - `name: string` — tên cookie
29
+ - `defaultValue?: T | (() => T)` — giá trị mặc định hoặc hàm trả về giá trị
30
+
31
+ **Trả về:** `T | undefined` — giá trị cookie đã chuyển đổi hoặc giá trị mặc định
32
+
33
+ #### `set`
34
+
35
+ Lưu giá trị cookie với các tham số được chỉ định và cập nhật tự động trong bộ nhớ và DOM. Nếu chặn đang hoạt động qua `CookieBlock`, giá trị chỉ được lưu trong bộ nhớ.
36
+
37
+ **Tham số:**
38
+ - `name: string` — tên cookie
39
+ - `value: T | (() => T)` — giá trị hoặc hàm trả về giá trị
40
+ - `options?: CookieOptions` — tham số cookie bổ sung
41
+
42
+ **Trả về:** `T` — giá trị đã lưu
43
+
44
+ #### `remove`
45
+
46
+ Xóa cookie bằng cách đặt giá trị rỗng và thời hạn hết hạn âm. Tương đương với việc gọi `set(name, '', { age: -1 })`.
47
+
48
+ **Tham số:**
49
+ - `name: string` — tên cookie
50
+
51
+ ### Cấu hình
52
+
53
+ - `init(getListener?, getListenerRaw?, setListener?)` — Khởi tạo bộ nhớ với các trình lắng nghe tùy chỉnh để đọc và ghi dữ liệu. Trình lắng nghe ghi `setListener` chấp nhận 4 đối số: `(key, value, cookie, options)`.
54
+ - `reset()` — Đặt lại lưu trữ bằng cách xóa tất cả phần tử trong bộ nhớ và xóa người nghe
55
+
56
+ ### Hỗ trợ
57
+
58
+ - `update()` — Cập nhật dữ liệu trong bộ nhớ bằng cách phân tích giá trị từ `document.cookie`
59
+
60
+ ## Các loại
61
+
62
+ ### `CookieOptions`
63
+
64
+ Đối tượng cấu hình cho tham số cookie:
65
+
66
+ - `age?: number` — thời gian tồn tại tính bằng giây (thuộc tính max-age)
67
+ - `sameSite?: 'strict' | 'lax'` — chính sách SameSite
68
+ - `path?: string` — đường dẫn cho cookie (mặc định là `/`)
69
+ - `domain?: string` — tên miền cho cookie
70
+ - `secure?: boolean` — nếu đúng, thêm thuộc tính Secure
71
+ - `httpOnly?: boolean` — nếu đúng, thêm thuộc tính HttpOnly (chỉ dành cho trình lắng nghe phía máy chủ)
72
+ - `partitioned?: boolean` — nếu đúng, thêm thuộc tính Partitioned (CHIPS)
73
+ - `arguments?: string[] | Record<string, any>` — các chỉ thị bổ sung cho chuỗi cookie
74
+
75
+ ## Chuyển đổi loại tích hợp
76
+
77
+ `CookieStorage` tự động chuyển đổi các giá trị chuỗi khi đọc:
78
+
79
+ - `'undefined'` → `undefined`
80
+ - `'null'` → `null`
81
+ - `'true'` → `true`
82
+ - `'false'` → `false`
83
+ - `'123'` → `123` (số)
84
+ - `'{"key":"value"}'` → `{key: 'value'}` (đối tượng JSON)
85
+
86
+ ## Ví dụ
87
+
88
+ ### Sử dụng cơ bản
89
+
90
+ ```typescript
91
+ import { CookieStorage } from '@dxtmisha/functional-basic'
92
+
93
+ // Lấy với giá trị mặc định
94
+ const theme = CookieStorage.get<string>('theme', 'dark')
95
+
96
+ // Lưu giá trị
97
+ CookieStorage.set('user', 'john', {
98
+ age: 3600,
99
+ sameSite: 'lax'
100
+ })
101
+
102
+ // Xóa
103
+ CookieStorage.remove('user')
104
+ ```
105
+
106
+ ### Khởi tạo với lưu trữ bên ngoài
107
+
108
+ ```typescript
109
+ import { CookieStorage } from '@dxtmisha/functional-basic'
110
+
111
+ CookieStorage.init(
112
+ (key) => myStorage.get(key),
113
+ undefined,
114
+ (key, value, cookie, options) => {
115
+ // cookie là chuỗi đã được định dạng như "key=value; max-age=..."
116
+ myStorage.set(key, value, cookie, options)
117
+ }
118
+ )
119
+ ```
120
+
121
+ ### Khởi tạo cho SSR (Raw)
122
+
123
+ ```typescript
124
+ import { CookieStorage } from '@dxtmisha/functional-basic'
125
+
126
+ // Đối với SSR, lấy tất cả cookie dưới dạng chuỗi thô
127
+ CookieStorage.init(
128
+ undefined,
129
+ () => request.headers.cookie
130
+ )
131
+ ```
132
+
133
+ ### Cập nhật và đặt lại
134
+
135
+ ```typescript
136
+ import { CookieStorage } from '@dxtmisha/functional-basic'
137
+
138
+ // Cập nhật dữ liệu trong bộ nhớ từ document.cookie
139
+ // Hữu ích khi cookie được đặt từ bên ngoài
140
+ CookieStorage.update()
141
+
142
+ // Đặt lại lưu trữ (xóa người nghe và dữ liệu trong bộ nhớ)
143
+ // Hữu ích cho kiểm thử hoặc dọn dẹp
144
+ CookieStorage.reset()
145
+ ```
146
+
147
+ ### Quy trình làm việc hoàn chỉnh
148
+
149
+ ```typescript
150
+ import { CookieStorage } from '@dxtmisha/functional-basic'
151
+
152
+ // Khởi tạo với lưu trữ tùy chỉnh
153
+ CookieStorage.init(
154
+ (key) => redis.get(key),
155
+ undefined,
156
+ (key, value, cookie, options) => redis.set(key, value, cookie, options)
157
+ )
158
+
159
+ // Đặt giá trị với các tùy chọn
160
+ CookieStorage.set('user', 'john', {
161
+ age: 3600, // 1 giờ
162
+ sameSite: 'lax', // Chính sách SameSite
163
+ path: '/', // Đường dẫn
164
+ secure: true, // Chỉ HTTPS
165
+ httpOnly: true, // Bảo vệ XSS (cho SSR)
166
+ arguments: ['Priority=High'] // Các chỉ thị bổ sung
167
+ })
168
+
169
+ // Nhận giá trị với chuyển đổi loại
170
+ const user = CookieStorage.get<string>('user')
171
+
172
+ // Cập nhật từ nguồn bên ngoài
173
+ CookieStorage.update()
174
+
175
+ // Dọn dẹp
176
+ CookieStorage.remove('user')
177
+ CookieStorage.reset()
178
+ ```
@@ -6,23 +6,31 @@ import {Meta} from '@storybook/addon-docs/blocks'
6
6
 
7
7
  A versatile class for interacting with the browser's `localStorage` and `sessionStorage`. It features built-in prefixes, cache expiration, memory caching for active instances, and automatic JSON serialization.
8
8
 
9
+ > `DataStorage` is an **auxiliary class**, designed for low-level interaction with browser storage. In most cases, it is recommended to use higher-level classes like `Cookie` or `Api` for specific data needs.
10
+
9
11
  ## Key Features
10
12
 
11
13
  - **Automatic Serialization** — seamlessly handles JSON parsing and stringifying for stored configurations and objects.
12
14
  - **Time-based Caching** — allows saving objects with timestamps and respects age constraints during data retrieval.
13
15
  - **Prefix Management** — supports global and instance-specific prefixes to isolate and group keys within `localStorage`.
14
16
  - **Memory Efficiency** — creates singletons for identical keys, avoiding duplicate reads from disk.
17
+ - **SSR Ready** — uses request-specific isolation during server-side rendering to prevent data leaks between parallel requests.
15
18
 
16
19
  ## Initialization
17
20
 
18
21
  To initialize the object, call the `DataStorage(name, isSession)` constructor.
19
22
 
23
+ ### Generic Constraints
24
+
25
+ The class supports the following generic to ensure strict typing of the stored value:
26
+ - `T` — The type of the value being stored.
27
+
20
28
  **Parameters:**
21
29
  - `name: string` — the name of the storage key.
22
30
  - `isSession: boolean = false` — whether to use `sessionStorage` (defaults to `localStorage`).
23
31
 
24
32
  ```typescript
25
- import { DataStorage } from '@dxtmisha/functional'
33
+ import { DataStorage } from '@dxtmisha/functional-basic'
26
34
 
27
35
  // 1. Create an instance for localStorage
28
36
  const settings = new DataStorage('settings')
@@ -31,23 +39,31 @@ const settings = new DataStorage('settings')
31
39
  const session = new DataStorage('user_session', true)
32
40
  ```
33
41
 
34
- ## Global Settings
42
+ ## Methods
35
43
 
36
- - `setPrefix(newPrefix: string): void` (static) — Changes the global prefix applied to new instances attempting to use `localStorage`. The default prefix is `ui-storage`.
44
+ ### Storage Access
37
45
 
38
- ## Data Management
46
+ - `get(defaultValue?: T | (() => T), cache?: number): T | undefined` — Retrieves the currently saved value. If a cache time is provided, it returns `undefined` if the data is stale.
47
+ - `set(value?: T | (() => T)): T | undefined` — Sets or updates the value in the storage mechanism. Passing `undefined` deletes the item.
48
+ - `remove(): this` — Clears the corresponding key from the storage environment and the memory instance.
49
+ - `update(): this` — Forces the memory instance to synchronize with the current raw data inside the physical Storage APIs.
39
50
 
40
- ### `get`
51
+ ### Configuration
41
52
 
42
- Retrieves the currently saved structured configuration.
53
+ - `static setPrefix(newPrefix: string): void` — Changes the global prefix applied to new instances. The default prefix is `ui-storage`.
43
54
 
44
- **Parameters:**
45
- - `defaultValue?: T | (() => T)` — a fallback value to return if the storage is empty.
46
- - `cache?: number` — maximum allowed age (in seconds). If the data is older, it behaves as if nothing was stored.
55
+ ## SSR and Hydration
47
56
 
48
- **Returns:** `T | undefined` the stored value or `undefined`.
57
+ The `DataStorage` class is fully compatible with Server-Side Rendering (SSR). It uses a special registry to isolate instances between different HTTP requests on the server.
49
58
 
59
+ > To avoid hydration mismatches (when the server-rendered HTML differs from the client-rendered one), it is recommended to call `get()` inside `useEffect` or other client-only hooks. On the server, `get()` will return `undefined` (or the `defaultValue`), as `localStorage` is not available.
60
+
61
+ ## Examples
62
+
63
+ ### Using Default Values and Cache
50
64
  ```javascript
65
+ const settings = new DataStorage('user_settings')
66
+
51
67
  // Get data, falling back to an empty object if not found
52
68
  const currentSettings = settings.get({})
53
69
 
@@ -55,20 +71,11 @@ const currentSettings = settings.get({})
55
71
  const cachedItem = settings.get(undefined, 60)
56
72
  ```
57
73
 
58
- ### `set`
59
-
60
- Sets or updates the value in the storage mechanism.
61
-
62
- **Parameters:**
63
- - `value?: T | (() => T)` — the value to save. Passing `undefined` will delete the item from storage.
64
-
65
- **Returns:** `T | undefined` — the stored value.
66
-
74
+ ### Manual Synchronization
67
75
  ```javascript
68
- settings.set({ theme: 'dark', notifications: true })
69
- ```
70
-
71
- ## Additional Methods
76
+ const storage = new DataStorage('shared_data')
72
77
 
73
- - `remove(): this` Clears the corresponding key actively from the `localStorage` or `sessionStorage` environments, and immediately unsets the existing memory instance.
74
- - `update(): this` Forces the memory instance to synchronize tightly with the current raw data inside the physical Storage APIs.
78
+ // ... data might be changed in another tab or part of the app
79
+ storage.update() // Sync memory instance with disk
80
+ console.log(storage.get())
81
+ ```
@@ -6,23 +6,31 @@ import {Meta} from '@storybook/addon-docs/blocks'
6
6
 
7
7
  Универсальный класс для взаимодействия с `localStorage` и `sessionStorage` браузера. Включает в себя автоматическое создание префиксов, ограничение срока действия кэша (возраст), кэширование в памяти для активных экземпляров и автоматическую сериализацию JSON.
8
8
 
9
+ > `DataStorage` является **вспомогательным классом**, предназначенным для низкоуровневого взаимодействия с хранилищем браузера. В большинстве случаев рекомендуется использовать специализированные классы, такие как `Cookie` или `Api`, для конкретных задач.
10
+
9
11
  ## Основные возможности
10
12
 
11
13
  - **Автоматическая сериализация** — легко справляется с разбором и преобразованием в JSON-строку при хранении конфигураций и объектов.
12
14
  - **Хранение с учётом времени** — позволяет сохранять объекты с временными метками и учитывать ограничения по возрасту значения во время его извлечения.
13
15
  - **Управление префиксами** — поддерживает глобальные и специфичные для каждого экземпляра префиксы, позволяющие изолировать и группировать ключи в рамках `localStorage`.
14
16
  - **Эффективная память** — создает паттерн singleton для идентичных ключей, чтобы избежать одновременного чтения непосредственно с диска.
17
+ - **Поддержка SSR** — использует изоляцию на уровне запросов при серверном рендеринге, предотвращая утечку данных между параллельными сессиями.
15
18
 
16
19
  ## Инициализация
17
20
 
18
21
  Для инициализации объекта вызовите конструктор `DataStorage(name, isSession)`.
19
22
 
23
+ ### Ограничения дженериков (Generic Constraints)
24
+
25
+ Класс поддерживает следующий дженерик для обеспечения строгой типизации сохраняемого значения:
26
+ - `T` — Тип данных, хранящихся в хранилище.
27
+
20
28
  **Параметры:**
21
29
  - `name: string` — название ключа в хранилище.
22
30
  - `isSession: boolean = false` — нужно ли использовать `sessionStorage` (по умолчанию `localStorage`).
23
31
 
24
32
  ```typescript
25
- import { DataStorage } from '@dxtmisha/functional'
33
+ import { DataStorage } from '@dxtmisha/functional-basic'
26
34
 
27
35
  // 1. Создание экземпляра для localStorage
28
36
  const settings = new DataStorage('settings')
@@ -31,23 +39,31 @@ const settings = new DataStorage('settings')
31
39
  const session = new DataStorage('user_session', true)
32
40
  ```
33
41
 
34
- ## Глобальная настройка
42
+ ## Методы
35
43
 
36
- - `setPrefix(newPrefix: string): void` (static) — Изменяет глобальный префикс, применяемый ко всем новым экземплярам. Префикс по умолчанию — `ui-storage`.
44
+ ### Доступ к хранилищу
37
45
 
38
- ## Управление данными
46
+ - `get(defaultValue?: T | (() => T), cache?: number): T | undefined` — Извлекает текущее сохраненное значение. Если указано время кэширования, возвращает `undefined`, если данные устарели.
47
+ - `set(value?: T | (() => T)): T | undefined` — Устанавливает или обновляет значение в хранилище. Передача `undefined` удаляет элемент.
48
+ - `remove(): this` — Удаляет соответствующий ключ из хранилища и очищает экземпляр в памяти.
49
+ - `update(): this` — Принудительно синхронизирует экземпляр памяти с актуальными данными из Storage API.
39
50
 
40
- ### `get`
51
+ ### Конфигурация
41
52
 
42
- Получает текущую сохранённую структурированную конфигурацию.
53
+ - `static setPrefix(newPrefix: string): void` — Изменяет глобальный префикс, применяемый ко всем новым экземплярам. Префикс по умолчанию — `ui-storage`.
43
54
 
44
- **Параметры:**
45
- - `defaultValue?: T | (() => T)` — запасное значение, которое будет возвращено, если хранилище пусто.
46
- - `cache?: number` — максимально допустимый возраст (в секундах). Если данные старше, они считаются не существующими.
55
+ ## SSR и Гидратация
47
56
 
48
- **Возвращает:** `T | undefined` сохраненное значение или `undefined`.
57
+ Класс `DataStorage` полностью совместим с серверным рендерингом (SSR). Он использует специальный реестр для изоляции экземпляров между различными HTTP-запросами на сервере.
49
58
 
59
+ > Чтобы избежать ошибок гидратации (когда HTML от сервера не совпадает с клиентским), рекомендуется вызывать метод `get()` внутри `useEffect` или других клиентских хуков. На сервере `get()` всегда будет возвращать `undefined` (или `defaultValue`), так как `localStorage` недоступен.
60
+
61
+ ## Примеры
62
+
63
+ ### Использование значений по умолчанию и кэша
50
64
  ```javascript
65
+ const settings = new DataStorage('user_settings')
66
+
51
67
  // Получение данных с откатом к пустому объекту, если они не найдены
52
68
  const currentSettings = settings.get({})
53
69
 
@@ -55,20 +71,11 @@ const currentSettings = settings.get({})
55
71
  const cachedItem = settings.get(undefined, 60)
56
72
  ```
57
73
 
58
- ### `set`
59
-
60
- Устанавливает или обновляет значение в механизме хранения.
61
-
62
- **Параметры:**
63
- - `value?: T | (() => T)` — значение для сохранения. Передача `undefined` удалит элемент из хранилища.
64
-
65
- **Возвращает:** `T | undefined` — сохраненное значение.
66
-
74
+ ### Ручная синхронизация
67
75
  ```javascript
68
- settings.set({ theme: 'dark', notifications: true })
69
- ```
70
-
71
- ## Дополнительные методы
76
+ const storage = new DataStorage('shared_data')
72
77
 
73
- - `remove(): this` Активно удаляет соответствующий ключ из среды `localStorage` или `sessionStorage`, а также немедленно очищает существующее значение в памяти.
74
- - `update(): this` Принудительно синхронизирует экземпляр памяти с текущими данными (raw) внутри физических API Storage.
78
+ // ... данные могли быть изменены в другой вкладке или части приложения
79
+ storage.update() // Синхронизируем память с диском
80
+ console.log(storage.get())
81
+ ```