@dxtmisha/wiki 0.39.7 → 0.39.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/dist/{defineProperty-DblGXmzD.js → defineProperty-Bjg6wMoX.js} +4 -4
  2. package/dist/library.js +1 -1
  3. package/dist/media.js +12 -0
  4. package/dist/storybook.js +1 -1
  5. package/package.json +1 -1
  6. package/src/media/functional/functional-basic/api/api.en.mdx +45 -0
  7. package/src/media/functional/functional-basic/api/api.ru.mdx +45 -0
  8. package/src/media/functional/functional-basic/api/api.vi.mdx +45 -0
  9. package/src/media/functional/functional-basic/classes/Api/Api.en.mdx +54 -54
  10. package/src/media/functional/functional-basic/classes/Api/Api.ru.mdx +54 -54
  11. package/src/media/functional/functional-basic/classes/Api/Api.vi.mdx +54 -54
  12. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.en.mdx +111 -0
  13. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.ru.mdx +111 -0
  14. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.vi.mdx +111 -0
  15. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.en.mdx +32 -0
  16. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.ru.mdx +32 -0
  17. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.vi.mdx +32 -0
  18. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.en.mdx +24 -28
  19. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.ru.mdx +24 -28
  20. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.vi.mdx +24 -28
  21. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.en.mdx +28 -14
  22. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.ru.mdx +33 -19
  23. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.vi.mdx +33 -19
  24. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.en.mdx +56 -0
  25. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.ru.mdx +56 -0
  26. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.vi.mdx +55 -0
  27. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.en.mdx +101 -49
  28. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.ru.mdx +101 -49
  29. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.vi.mdx +98 -47
  30. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.en.mdx +44 -26
  31. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.ru.mdx +45 -27
  32. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.vi.mdx +44 -26
  33. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.en.mdx +50 -21
  34. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.ru.mdx +54 -25
  35. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.vi.mdx +55 -26
  36. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.en.mdx +29 -32
  37. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.ru.mdx +33 -36
  38. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.vi.mdx +33 -36
  39. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.en.mdx +34 -53
  40. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.ru.mdx +33 -52
  41. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.vi.mdx +39 -58
  42. package/src/media/functional/functional-basic/classes/Cache/Cache.en.mdx +7 -4
  43. package/src/media/functional/functional-basic/classes/Cache/Cache.ru.mdx +7 -4
  44. package/src/media/functional/functional-basic/classes/Cache/Cache.vi.mdx +28 -25
  45. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.en.mdx +45 -53
  46. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.ru.mdx +46 -54
  47. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.vi.mdx +47 -55
  48. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.en.mdx +13 -1
  49. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.ru.mdx +13 -1
  50. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.vi.mdx +13 -0
  51. package/src/media/functional/functional-basic/classes/Cookie/Cookie.en.mdx +88 -44
  52. package/src/media/functional/functional-basic/classes/Cookie/Cookie.ru.mdx +88 -44
  53. package/src/media/functional/functional-basic/classes/Cookie/Cookie.vi.mdx +85 -41
  54. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.en.mdx +43 -22
  55. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.ru.mdx +46 -25
  56. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.vi.mdx +43 -22
  57. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.en.mdx +84 -0
  58. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.ru.mdx +84 -0
  59. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.vi.mdx +100 -0
  60. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.en.mdx +153 -0
  61. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.ru.mdx +153 -0
  62. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.vi.mdx +153 -0
  63. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.en.mdx +32 -25
  64. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.ru.mdx +32 -25
  65. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.vi.mdx +32 -27
  66. package/src/media/functional/functional-basic/classes/Datetime/Datetime.en.mdx +36 -4
  67. package/src/media/functional/functional-basic/classes/Datetime/Datetime.ru.mdx +36 -4
  68. package/src/media/functional/functional-basic/classes/Datetime/Datetime.vi.mdx +36 -4
  69. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.en.mdx +101 -70
  70. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.ru.mdx +100 -69
  71. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.vi.mdx +101 -70
  72. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.en.mdx +46 -42
  73. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.ru.mdx +46 -42
  74. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.vi.mdx +46 -42
  75. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.en.mdx +44 -96
  76. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.ru.mdx +44 -96
  77. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.vi.mdx +44 -96
  78. package/src/media/functional/functional-basic/classes/EventItem/EventItem.en.mdx +49 -28
  79. package/src/media/functional/functional-basic/classes/EventItem/EventItem.ru.mdx +21 -0
  80. package/src/media/functional/functional-basic/classes/EventItem/EventItem.vi.mdx +63 -42
  81. package/src/media/functional/functional-basic/classes/Formatters/Formatters.en.mdx +97 -109
  82. package/src/media/functional/functional-basic/classes/Formatters/Formatters.ru.mdx +86 -98
  83. package/src/media/functional/functional-basic/classes/Formatters/Formatters.vi.mdx +99 -111
  84. package/src/media/functional/functional-basic/classes/Geo/Geo.en.mdx +3 -3
  85. package/src/media/functional/functional-basic/classes/Geo/Geo.ru.mdx +5 -5
  86. package/src/media/functional/functional-basic/classes/Geo/Geo.vi.mdx +5 -5
  87. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.en.mdx +83 -40
  88. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.ru.mdx +83 -40
  89. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.vi.mdx +87 -44
  90. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.en.mdx +81 -0
  91. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.ru.mdx +81 -0
  92. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.vi.mdx +81 -0
  93. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.en.mdx +56 -105
  94. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.ru.mdx +53 -102
  95. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.vi.mdx +55 -105
  96. package/src/media/functional/functional-basic/classes/Hash/Hash.en.mdx +18 -7
  97. package/src/media/functional/functional-basic/classes/Hash/Hash.ru.mdx +18 -7
  98. package/src/media/functional/functional-basic/classes/Hash/Hash.vi.mdx +18 -7
  99. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.en.mdx +54 -0
  100. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.ru.mdx +54 -0
  101. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.vi.mdx +54 -0
  102. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.en.mdx +78 -0
  103. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.ru.mdx +78 -0
  104. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.vi.mdx +78 -0
  105. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.en.mdx +50 -0
  106. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.ru.mdx +50 -0
  107. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.vi.mdx +50 -0
  108. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.en.mdx +131 -0
  109. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.ru.mdx +131 -0
  110. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.vi.mdx +131 -0
  111. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.en.mdx +97 -0
  112. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.ru.mdx +97 -0
  113. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.vi.mdx +97 -0
  114. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.en.mdx +13 -5
  115. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.ru.mdx +13 -5
  116. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.vi.mdx +13 -5
  117. package/src/media/functional/functional-basic/functions/anyToString/anyToString.en.mdx +37 -19
  118. package/src/media/functional/functional-basic/functions/anyToString/anyToString.ru.mdx +37 -19
  119. package/src/media/functional/functional-basic/functions/anyToString/anyToString.vi.mdx +35 -17
  120. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.en.mdx +31 -19
  121. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.ru.mdx +31 -19
  122. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.vi.mdx +32 -20
  123. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.en.mdx +29 -15
  124. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.ru.mdx +28 -14
  125. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.vi.mdx +28 -14
  126. package/src/media/functional/functional-basic/functions/capitalize/capitalize.en.mdx +7 -3
  127. package/src/media/functional/functional-basic/functions/capitalize/capitalize.ru.mdx +7 -3
  128. package/src/media/functional/functional-basic/functions/capitalize/capitalize.vi.mdx +7 -3
  129. package/src/media/functional/functional-basic/functions/copyObject/copyObject.en.mdx +17 -13
  130. package/src/media/functional/functional-basic/functions/copyObject/copyObject.ru.mdx +17 -13
  131. package/src/media/functional/functional-basic/functions/copyObject/copyObject.vi.mdx +17 -13
  132. package/src/media/functional/functional-basic/functions/createElement/createElement.en.mdx +2 -0
  133. package/src/media/functional/functional-basic/functions/createElement/createElement.ru.mdx +2 -0
  134. package/src/media/functional/functional-basic/functions/createElement/createElement.vi.mdx +2 -0
  135. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.en.mdx +1 -3
  136. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.ru.mdx +1 -3
  137. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.vi.mdx +1 -3
  138. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.en.mdx +13 -10
  139. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.ru.mdx +14 -11
  140. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.vi.mdx +12 -9
  141. package/src/media/functional/functional-basic/functions/executePromise/executePromise.en.mdx +14 -13
  142. package/src/media/functional/functional-basic/functions/executePromise/executePromise.ru.mdx +15 -14
  143. package/src/media/functional/functional-basic/functions/executePromise/executePromise.vi.mdx +14 -13
  144. package/src/media/functional/functional-basic/functions/forEach/forEach.en.mdx +1 -1
  145. package/src/media/functional/functional-basic/functions/forEach/forEach.ru.mdx +1 -1
  146. package/src/media/functional/functional-basic/functions/forEach/forEach.vi.mdx +1 -1
  147. package/src/media/functional/functional-basic/functions/frame/frame.en.mdx +7 -4
  148. package/src/media/functional/functional-basic/functions/frame/frame.ru.mdx +6 -3
  149. package/src/media/functional/functional-basic/functions/frame/frame.vi.mdx +7 -4
  150. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.en.mdx +34 -0
  151. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.ru.mdx +34 -0
  152. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.vi.mdx +35 -0
  153. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.en.mdx +2 -0
  154. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.ru.mdx +2 -0
  155. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.vi.mdx +2 -0
  156. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.en.mdx +21 -0
  157. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.ru.mdx +21 -0
  158. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.vi.mdx +21 -0
  159. package/src/media/functional/functional-basic/functions/getElementId/getElementId.en.mdx +17 -3
  160. package/src/media/functional/functional-basic/functions/getElementId/getElementId.ru.mdx +17 -3
  161. package/src/media/functional/functional-basic/functions/getElementId/getElementId.vi.mdx +18 -4
  162. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.en.mdx +31 -0
  163. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.ru.mdx +31 -0
  164. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.vi.mdx +31 -0
  165. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.en.mdx +25 -0
  166. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.ru.mdx +25 -0
  167. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.vi.mdx +25 -0
  168. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.en.mdx +11 -4
  169. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.ru.mdx +14 -7
  170. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.vi.mdx +13 -6
  171. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.en.mdx +3 -2
  172. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.ru.mdx +3 -2
  173. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.vi.mdx +3 -2
  174. package/src/media/functional/functional-basic/functions/toNumber/toNumber.en.mdx +25 -9
  175. package/src/media/functional/functional-basic/functions/toNumber/toNumber.ru.mdx +25 -9
  176. package/src/media/functional/functional-basic/functions/toNumber/toNumber.vi.mdx +25 -9
  177. package/src/media/functional/functional-basic/functions/toString/toString.en.mdx +28 -0
  178. package/src/media/functional/functional-basic/functions/toString/toString.ru.mdx +28 -0
  179. package/src/media/functional/functional-basic/functions/toString/toString.vi.mdx +28 -0
  180. package/src/media/functional/ui/about/about.en.mdx +45 -0
  181. package/src/media/functional/ui/about/about.ru.mdx +45 -0
  182. package/src/media/functional/ui/about/about.vi.mdx +45 -0
  183. package/src/media/functional/ui/component/component.en.mdx +104 -0
  184. package/src/media/functional/ui/component/component.ru.mdx +106 -0
  185. package/src/media/functional/ui/component/component.vi.mdx +104 -0
  186. package/src/media/functional/ui/setup/setup.en.mdx +72 -0
  187. package/src/media/functional/ui/setup/setup.ru.mdx +72 -0
  188. package/src/media/functional/ui/setup/setup.vi.mdx +72 -0
  189. package/src/media/functional/ui/wiki-data.en.mdx +114 -0
  190. package/src/media/functional/ui/wiki-data.ru.mdx +114 -0
  191. package/src/media/functional/ui/wiki-data.vi.mdx +114 -0
@@ -46,7 +46,7 @@ const fromTs = new Datetime(1710460800000)
46
46
  - `getHoursType(): GeoHours` — Determines the hour format (12 or 24) for the current locale.
47
47
  - `getHour24(): boolean` — Returns the current setting for displaying the 24-hour format.
48
48
  - `getTimeZoneOffset(): number` — Returns the time zone offset in minutes.
49
- - `getTimeZone(style?: GeoTimeZoneStyle): string` — Returns the time zone (supports `minute`, `hour`, `RFC` styles).
49
+ - `getTimeZone(style?: GeoTimeZoneStyle): string` — Returns the time zone (supports `minute`, `hour`, `RFC` styles; default format with colon).
50
50
  - `getFirstDayCode(): GeoFirstDay` — Returns the code for the first day of the week (0 for Sunday, 1 for Monday, 6 for Saturday).
51
51
 
52
52
  ### Value Retrieval
@@ -57,7 +57,7 @@ const fromTs = new Datetime(1710460800000)
57
57
  - `getHour(): number` — Returns the hours.
58
58
  - `getMinute(): number` — Returns the minutes.
59
59
  - `getSecond(): number` — Returns the seconds.
60
- - `getMaxDay(): number` — Returns the number of days in the current month.
60
+ - `getMaxDay(): number` — Returns the number of the last day of the current month (28-31).
61
61
 
62
62
  ### Value Setting
63
63
 
@@ -92,7 +92,7 @@ Modify the current `Datetime` object.
92
92
  - `moveWeekdayFirst(): this` — Move to the first day of the current week.
93
93
  - `moveWeekdayLast(): this` — Move to the last day of the current week.
94
94
  - `moveWeekdayFirstByMonth(): this` — Move to the first day of the first week of the month.
95
- - `moveWeekdayLastByMonth(): this` — Move to the first day of the first full week of the next month.
95
+ - `moveWeekdayLastByMonth(): this` — Move to the last day of the last week of the current month.
96
96
  - `moveWeekdayNext(): this` — Shift one week forward.
97
97
  - `moveWeekdayPrevious(): this` — Shift one week backward.
98
98
  - `moveDayFirst(): this` — Move to the first day of the current month.
@@ -113,7 +113,7 @@ Create copies of the data.
113
113
  - `cloneWeekdayFirst(): Datetime` — Copy set to the beginning of the current week.
114
114
  - `cloneWeekdayLast(): Datetime` — Copy set to the end of the current week.
115
115
  - `cloneWeekdayFirstByMonth(): Datetime` — Copy to the beginning of the first week of the month.
116
- - `cloneWeekdayLastByMonth(): Datetime` — Copy to the beginning of the last week of the month.
116
+ - `cloneWeekdayLastByMonth(): Datetime` — Copy to the end of the last week of the month.
117
117
  - `cloneWeekdayNext(): Datetime` — Copy with a shift of one week forward.
118
118
  - `cloneWeekdayPrevious(): Datetime` — Copy with a shift of one week backward.
119
119
  - `cloneDayFirst(): Datetime` — Copy to the first day of the current month.
@@ -159,6 +159,38 @@ dt.standard() // "2024-03-15T00:00:00+03:00"
159
159
  dt.standard(false) // "2024-03-15T00:00:00"
160
160
  ```
161
161
 
162
+ ## SSR and Hydration
163
+
164
+ > **Warning (SSR):** Creating a `Datetime` instance without a specific date (using the current time) for rendering in SSR may lead to hydration mismatches because the time or time zone on the server may differ from the time on the client.
165
+
166
+ ### Recommended Practices
167
+
168
+ When using `Datetime` in SSR environments:
169
+
170
+ 1. **Always provide specific dates**: Pass explicit dates to the constructor instead of relying on the current time.
171
+
172
+ 2. **Use server-side date initialization**: Initialize dates on the server with specific values to ensure consistency.
173
+
174
+ 3. **Client-side only for dynamic dates**: For dates that need to show the current time, initialize them only on the client side (e.g., in `useEffect`).
175
+
176
+ 4. **Consider timezone differences**: Be aware that server and client timezones may differ, affecting date calculations and formatting.
177
+
178
+ ### Example of Safe SSR Usage
179
+
180
+ ```javascript
181
+ // ✅ Good: Specific date for SSR
182
+ const serverDate = new Datetime('2024-03-15')
183
+
184
+ // ✅ Good: Initialize on client for current time
185
+ useEffect(() => {
186
+ const now = new Datetime()
187
+ setCurrentTime(now.locale('datetime'))
188
+ }, [])
189
+
190
+ // ❌ Avoid: Current time in SSR
191
+ const now = new Datetime() // May cause hydration mismatch
192
+ ```
193
+
162
194
  ## Usage Examples
163
195
 
164
196
  ### Working with Intervals and Navigation
@@ -46,7 +46,7 @@ const fromTs = new Datetime(1710460800000)
46
46
  - `getHoursType(): GeoHours` — Определяет формат часов (12 или 24) для текущей локали.
47
47
  - `getHour24(): boolean` — Возвращает текущую настройку отображения 24-часового формата.
48
48
  - `getTimeZoneOffset(): number` — Возвращает смещение часового пояса в минутах.
49
- - `getTimeZone(style?: GeoTimeZoneStyle): string` — Возвращает часовой пояс (поддерживает стили `minute`, `hour`, `RFC`).
49
+ - `getTimeZone(style?: GeoTimeZoneStyle): string` — Возвращает часовой пояс (поддерживает стили `minute`, `hour`, `RFC`; по умолчанию формат с двоеточием).
50
50
  - `getFirstDayCode(): GeoFirstDay` — Возвращает код первого дня недели (0 для воскресенья, 1 для понедельника, 6 для субботы).
51
51
 
52
52
  ### Получение значений
@@ -57,7 +57,7 @@ const fromTs = new Datetime(1710460800000)
57
57
  - `getHour(): number` — Возвращает часы.
58
58
  - `getMinute(): number` — Возвращает минуты.
59
59
  - `getSecond(): number` — Возвращает секунды.
60
- - `getMaxDay(): number` — Возвращает количество дней в текущем месяце.
60
+ - `getMaxDay(): number` — Возвращает число последнего дня текущего месяца (28-31).
61
61
 
62
62
  ### Установка значений
63
63
 
@@ -92,7 +92,7 @@ const fromTs = new Datetime(1710460800000)
92
92
  - `moveWeekdayFirst(): this` — Переход к первому дню текущей недели.
93
93
  - `moveWeekdayLast(): this` — Переход к последнему дню текущей недели.
94
94
  - `moveWeekdayFirstByMonth(): this` — Переход к первому дню первой недели месяца.
95
- - `moveWeekdayLastByMonth(): this` — Переход к первому дню первой полной недели следующего месяца.
95
+ - `moveWeekdayLastByMonth(): this` — Переход к последнему дню последней недели текущего месяца.
96
96
  - `moveWeekdayNext(): this` — Смещение на одну неделю вперед.
97
97
  - `moveWeekdayPrevious(): this` — Смещение на одну неделю назад.
98
98
  - `moveDayFirst(): this` — Переход к первому числу текущего месяца.
@@ -113,7 +113,7 @@ const fromTs = new Datetime(1710460800000)
113
113
  - `cloneWeekdayFirst(): Datetime` — Копия, установленная на начало текущей недели.
114
114
  - `cloneWeekdayLast(): Datetime` — Копия, установленная на конец текущей недели.
115
115
  - `cloneWeekdayFirstByMonth(): Datetime` — Копия на начало первой недели месяца.
116
- - `cloneWeekdayLastByMonth(): Datetime` — Копия на начало последней недели месяца.
116
+ - `cloneWeekdayLastByMonth(): Datetime` — Копия на конец последней недели месяца.
117
117
  - `cloneWeekdayNext(): Datetime` — Копия со сдвигом на неделю вперед.
118
118
  - `cloneWeekdayPrevious(): Datetime` — Копия со сдвигом на неделю назад.
119
119
  - `cloneDayFirst(): Datetime` — Копия на первое число текущего месяца.
@@ -159,6 +159,38 @@ dt.standard() // "2024-03-15T00:00:00+03:00"
159
159
  dt.standard(false) // "2024-03-15T00:00:00"
160
160
  ```
161
161
 
162
+ ## SSR и Гидратация
163
+
164
+ > **Внимание (SSR):** Создание экземпляра `Datetime` без указания конкретной даты (использование текущего времени) для отрисовки в SSR может привести к ошибкам гидратации, так как время или часовой пояс сервера могут отличаться от времени на стороне клиента.
165
+
166
+ ### Рекомендуемые практики
167
+
168
+ При использовании `Datetime` в SSR-окружениях:
169
+
170
+ 1. **Всегда указывайте конкретные даты**: Передавайте явные даты в конструктор вместо использования текущего времени.
171
+
172
+ 2. **Используйте инициализацию даты на сервере**: Инициализируйте даты на сервере с конкретными значениями для обеспечения согласованности.
173
+
174
+ 3. **Только клиентская инициализация для динамических дат**: Для дат, которые должны показывать текущее время, инициализируйте их только на стороне клиента (например, в `useEffect`).
175
+
176
+ 4. **Учитывайте различия часовых поясов**: Помните, что часовые пояса сервера и клиента могут отличаться, что влияет на вычисления и форматирование дат.
177
+
178
+ ### Пример безопасного использования в SSR
179
+
180
+ ```javascript
181
+ // ✅ Хорошо: Конкретная дата для SSR
182
+ const serverDate = new Datetime('2024-03-15')
183
+
184
+ // ✅ Хорошо: Инициализация на клиенте для текущего времени
185
+ useEffect(() => {
186
+ const now = new Datetime()
187
+ setCurrentTime(now.locale('datetime'))
188
+ }, [])
189
+
190
+ // ❌ Избегайте: Текущее время в SSR
191
+ const now = new Datetime() // Может вызвать ошибку гидратации
192
+ ```
193
+
162
194
  ## Примеры использования
163
195
 
164
196
  ### Работа с интервалами и навигацией
@@ -46,7 +46,7 @@ const fromTs = new Datetime(1710460800000)
46
46
  - `getHoursType(): GeoHours` — Xác định định dạng giờ (12 hoặc 24) cho địa phương hiện tại.
47
47
  - `getHour24(): boolean` — Trả về thiết lập hiện tại cho việc hiển thị định dạng 24 giờ.
48
48
  - `getTimeZoneOffset(): number` — Trả về độ lệch múi giờ tính bằng phút.
49
- - `getTimeZone(style?: GeoTimeZoneStyle): string` — Trả về múi giờ (hỗ trợ các kiểu `minute`, `hour`, `RFC`).
49
+ - `getTimeZone(style?: GeoTimeZoneStyle): string` — Trả về múi giờ (hỗ trợ các kiểu `minute`, `hour`, `RFC`; định dạng mặc định với dấu hai chấm).
50
50
  - `getFirstDayCode(): GeoFirstDay` — Trả về mã cho ngày đầu tiên của tuần (0 cho Chủ Nhật, 1 cho Thứ Hai, 6 cho Thứ Bảy).
51
51
 
52
52
  ### Lấy giá trị
@@ -57,7 +57,7 @@ const fromTs = new Datetime(1710460800000)
57
57
  - `getHour(): number` — Trả về giờ.
58
58
  - `getMinute(): number` — Trả về phút.
59
59
  - `getSecond(): number` — Trả về giây.
60
- - `getMaxDay(): number` — Trả về số ngày trong tháng hiện tại.
60
+ - `getMaxDay(): number` — Trả về số của ngày cuối cùng trong tháng hiện tại (28-31).
61
61
 
62
62
  ### Thiết lập giá trị
63
63
 
@@ -92,7 +92,7 @@ Thay đổi đối tượng `Datetime` hiện tại.
92
92
  - `moveWeekdayFirst(): this` — Chuyển đến ngày đầu tiên của tuần hiện tại.
93
93
  - `moveWeekdayLast(): this` — Chuyển đến ngày cuối cùng của tuần hiện tại.
94
94
  - `moveWeekdayFirstByMonth(): this` — Chuyển đến ngày đầu tiên của tuần đầu tiên trong tháng.
95
- - `moveWeekdayLastByMonth(): this` — Chuyển đến ngày đầu tiên của tuần đầy đủ đầu tiên của tháng tiếp theo.
95
+ - `moveWeekdayLastByMonth(): this` — Chuyển đến ngày cuối cùng của tuần cuối cùng trong tháng hiện tại.
96
96
  - `moveWeekdayNext(): this` — Dịch chuyển một tuần về phía trước.
97
97
  - `moveWeekdayPrevious(): this` — Dịch chuyển một tuần về phía sau.
98
98
  - `moveDayFirst(): this` — Chuyển đến ngày đầu tiên của tháng hiện tại.
@@ -113,7 +113,7 @@ Tạo bản sao của dữ liệu.
113
113
  - `cloneWeekdayFirst(): Datetime` — Sao chép được thiết lập vào đầu tuần hiện tại.
114
114
  - `cloneWeekdayLast(): Datetime` — Sao chép được thiết lập vào cuối tuần hiện tại.
115
115
  - `cloneWeekdayFirstByMonth(): Datetime` — Sao chép đến đầu tuần đầu tiên của tháng.
116
- - `cloneWeekdayLastByMonth(): Datetime` — Sao chép đến đầu tuần cuối cùng của tháng.
116
+ - `cloneWeekdayLastByMonth(): Datetime` — Sao chép đến cuối tuần cuối cùng của tháng.
117
117
  - `cloneWeekdayNext(): Datetime` — Sao chép với việc dịch chuyển một tuần về phía trước.
118
118
  - `cloneWeekdayPrevious(): Datetime` — Sao chép với việc dịch chuyển một tuần về phía sau.
119
119
  - `cloneDayFirst(): Datetime` — Sao chép đến ngày đầu tiên của tháng hiện tại.
@@ -159,6 +159,38 @@ dt.standard() // "2024-03-15T00:00:00+03:00"
159
159
  dt.standard(false) // "2024-03-15T00:00:00"
160
160
  ```
161
161
 
162
+ ## SSR và Hydration
163
+
164
+ > **Cảnh báo (SSR):** Việc tạo một thực thể `Datetime` mà không có ngày cụ thể (sử dụng thời gian hiện tại) để render trong SSR có thể dẫn đến lỗi hydration mismatch vì thời gian hoặc múi giờ trên máy chủ có thể khác với thời gian trên máy khách.
165
+
166
+ ### Thực tiễn khuyến nghị
167
+
168
+ Khi sử dụng `Datetime` trong môi trường SSR:
169
+
170
+ 1. **Luôn cung cấp ngày cụ thể**: Truyền ngày cụ thể vào hàm khởi tạo thay vì sử dụng thời gian hiện tại.
171
+
172
+ 2. **Sử dụng khởi tạo ngày ở phía máy chủ**: Khởi tạo ngày ở máy chủ với các giá trị cụ thể để đảm bảo tính nhất quán.
173
+
174
+ 3. **Chỉ khởi tạo ở phía máy khách cho ngày động**: Đối với ngày cần hiển thị thời gian hiện tại, chỉ khởi tạo ở phía máy khách (ví dụ: trong `useEffect`).
175
+
176
+ 4. **Cân nhắc sự khác biệt múi giờ**: Lưu ý rằng múi giờ máy chủ và máy khách có thể khác nhau, ảnh hưởng đến tính toán và định dạng ngày.
177
+
178
+ ### Ví dụ về sử dụng an toàn trong SSR
179
+
180
+ ```javascript
181
+ // ✅ Tốt: Ngày cụ thể cho SSR
182
+ const serverDate = new Datetime('2024-03-15')
183
+
184
+ // ✅ Tốt: Khởi tạo ở máy khách cho thời gian hiện tại
185
+ useEffect(() => {
186
+ const now = new Datetime()
187
+ setCurrentTime(now.locale('datetime'))
188
+ }, [])
189
+
190
+ // ❌ Tránh: Thời gian hiện tại trong SSR
191
+ const now = new Datetime() // Có thể gây lỗi hydration
192
+ ```
193
+
162
194
  ## Ví dụ sử dụng
163
195
 
164
196
  ### Làm việc với Khoảng thời gian và Điều hướng
@@ -2,94 +2,125 @@ import {Meta} from '@storybook/addon-docs/blocks'
2
2
 
3
3
  <Meta title='@dxtmisha/en/functional-basic/Classes/ErrorCenter - Error Management'/>
4
4
 
5
- # ErrorCenter
5
+ # ErrorCenter Class
6
6
 
7
- A static wrapper for `ErrorCenterInstance` providing centralized management for error storage, retrieval, and event-based handling. It acts as a global registry for error causes and provides a mechanism to register and trigger custom handlers for different error groups.
7
+ `ErrorCenter` is the central tool for managing all errors in the application. It allows you to register possible error causes in one place, configure the reaction to them (e.g., showing notifications), and trigger them from any part of the code.
8
8
 
9
- The class follows the "Static Bridge" pattern, delegating all operations to a singleton instance while maintaining a clean, globally accessible API.
9
+ The class acts as a static bridge (Static Bridge), directing all requests to a single `ErrorCenterInstance`.
10
10
 
11
- ## Key Features
11
+ ## Methods
12
12
 
13
- - **Static Access** — Global access to error management without the need for manual instantiation.
14
- - **Centralized Registry**Stores standardized error causes (labels and messages) for consistent UI feedback.
15
- - **Group-Based Handling** — Allows registering multiple callbacks for specific error categories.
16
- - **Chainable API** — Methods for adding causes and handlers support fluent interface design.
17
- - **Predefined Defaults** — Comes pre-configured with standard network error causes (`timeout`, `offline`, `notFound`, etc.).
13
+ ### Action
14
+ - `on(cause: ErrorCenterCauseItem): void` Starts the processing. Searches the registry, merges data, and calls the appropriate callbacks.
18
15
 
19
- ## Check Methods
16
+ ### Verification
17
+ - `has(code: string, group?: string): boolean` — Checks if an error is registered.
18
+ - `get(code: string, group?: string): ErrorCenterCauseItem | undefined` — Returns error data from the registry.
20
19
 
21
- - `has(code: string, group?: string): boolean` — Checks if an error cause exists in the registry.
22
- - `get(code: string, group?: string): ErrorCenterCauseItem | undefined` — Retrieves the full error cause object.
20
+ ### Configuration
21
+ - `add(cause: ErrorCenterCauseItem): void` — Adds a single error cause.
22
+ - `addList(causes: ErrorCenterCauseList): void` — Adds a list of errors (batch registration).
23
+ - `addHandler(group: ErrorCenterGroup, handler: ErrorCenterHandlerCallback): void` — Registers a reaction to a group of errors.
24
+ - `addHandlerList(handlers: ErrorCenterHandlerList): void` — Batch registration of several handlers.
23
25
 
24
- ## Instance Retrieval
25
-
26
- - `getItem(): ErrorCenterInstance` — Returns the underlying instance used by the static wrapper.
27
-
28
- ## Configuration
29
-
30
- - `add(cause: ErrorCenterCauseItem): this` — Adds a single error cause to the global storage.
31
- - `addList(causes: ErrorCenterCauseList): this` — Adds multiple error causes to the registry at once.
32
- - `addHandler(group: ErrorCenterGroup, handler: ErrorCenterHandlerCallback): this` — Registers a callback function for a specific group.
33
- - `addHandlerList(handlers: ErrorCenterHandlerList): this` — Registers a batch of handlers.
34
-
35
- ## Action Methods
36
-
37
- ### `on`
38
-
39
- Triggers error handling for the specified cause. It merges the provided cause with stored data (if any), executes all registered handlers for the group, and logs the error to the console.
40
-
41
- **Parameters:**
42
- - `cause: ErrorCenterCauseItem` — The cause to trigger. Only `code` and `group` are required if the cause was previously registered via `add()`.
43
-
44
- **Returns:** `this`
26
+ ### Auxiliary
27
+ - `getItem(): ErrorCenterInstance` — Returns the internal instance of the class.
45
28
 
46
29
  ## Types
47
30
 
48
- ### `ErrorCenterCauseItem`
49
-
50
- The main object used to define an error cause.
31
+ #### `ErrorCenterGroup`
32
+ Group name (e.g., 'api', 'auth') or `undefined` for a general handler.
51
33
 
52
- - `group?: ErrorCenterGroup` — The category/group the error belongs to.
53
- - `code: string` Unique identifier for the error.
54
- - `label?: string` — Human-readable name of the error.
55
- - `message?: string` — Detailed description of the error.
56
- - `details?: any` — Optional object for additional context or technical data.
34
+ #### `ErrorCenterCauseItem`
35
+ Object describing an error: `group`, `code` (required), `priority`, `label`, `message`, `details`.
57
36
 
58
- ### `ErrorCenterGroup`
37
+ ## Usage Guide
59
38
 
60
- A simple type definition for categorizing errors: `string | undefined`.
61
-
62
- ## Default Error Causes
63
-
64
- The `ErrorCenter` is automatically populated with these standard network-related causes:
39
+ ### Step 1: Registration (Registry)
40
+ Create an error dictionary to store texts separately from the code.
41
+ ```typescript
42
+ ErrorCenter.add({
43
+ group: 'auth',
44
+ code: 'LOGIN_FAILED',
45
+ label: 'Login Failed',
46
+ message: 'Invalid password.'
47
+ })
48
+ ```
65
49
 
66
- - `unknown` **Unknown Error**: An unexpected error occurred. Please try again.
67
- - `timeout` **Request Timeout**: The request took too long. Please check your connection.
68
- - `offline` — **No Connection**: You are offline. Please check your internet connection.
69
- - `notFound` **Not Found**: The requested resource could not be found.
70
- - `server` — **Server Error**: Internal server error occurred.
50
+ ### Step 2: Subscription (Handlers)
51
+ Specify how the application should react to an error group.
52
+ ```typescript
53
+ ErrorCenter.addHandler('auth', (cause) => {
54
+ alert(cause.message);
55
+ });
56
+ ```
71
57
 
72
- ## Usage Example
58
+ ### Step 3: Execution (Execution)
59
+ Trigger the error by its code and group.
60
+ ```typescript
61
+ ErrorCenter.on({ group: 'auth', code: 'LOGIN_FAILED' });
62
+ ```
73
63
 
74
- ```javascript
64
+ ## Standard Error Causes
65
+
66
+ The class already contains pre-defined descriptions for common situations.
67
+
68
+ #### API Group (`api`)
69
+ Used for network request errors.
70
+ - **forbidden** — Forbidden (403).
71
+ - **notFound** — Resource not found (404).
72
+ - **offline** — No internet connection.
73
+ - **server** — Internal server error (500).
74
+ - **timeout** — Request timeout.
75
+ - **unauthorized** — Authorization error (401).
76
+ - **unknown** — Unknown error.
77
+ - **cacheClear**, **cacheGet**, **cacheRemove**, **cacheSet** — Cache errors.
78
+
79
+ #### Intl Group (`intl`)
80
+ Errors during data formatting (dates, numbers, etc.).
81
+ - **datetime**, **display**, **number**, **plural**, **relative**.
82
+ - **invalid** — Invalid date or incorrect format.
83
+
84
+ #### Storage Group (`storage`)
85
+ Errors during interaction with local or server storage.
86
+ - **context** — Missing context.
87
+ - **error** — General read/write failure.
88
+
89
+ #### Other Groups
90
+ These groups use a universal error code `error`. Triggering is done via `ErrorCenter.on({ group: 'group_name', code: 'error' })`.
91
+ - **broadcast** — Errors in data exchange between browser tabs.
92
+ - **hydration** — Error during data synchronization between server and client.
93
+ - **share** — Error when trying to share content (Sharing API).
94
+ - **transformation** — Error during data transformation or parsing.
95
+
96
+ ## Examples
97
+
98
+ ### Integration with Notification System
99
+ ```typescript
75
100
  import { ErrorCenter } from '@dxtmisha/functional-basic'
76
101
 
77
- // 1. Configure global handlers
102
+ // Set up once at app startup
78
103
  ErrorCenter.addHandler('api', (cause) => {
79
- notification.error({
80
- title: cause.label,
81
- message: cause.message
82
- })
83
- })
84
-
85
- // 2. Register specific error causes
86
- ErrorCenter.add({
87
- group: 'auth',
88
- code: 'token_expired',
89
- label: 'Session Expired',
90
- message: 'Your session has timed out. Please log in again.'
91
- })
104
+ Toast.show(cause.label || 'Error', cause.message);
105
+ });
106
+
107
+ // Use in any service
108
+ async function loadData() {
109
+ try {
110
+ const data = await fetch('/api');
111
+ } catch (e) {
112
+ ErrorCenter.on({ group: 'api', code: 'server', details: e });
113
+ }
114
+ }
115
+ ```
92
116
 
93
- // 3. Trigger errors via code and group
94
- ErrorCenter.on({ group: 'auth', code: 'token_expired' })
117
+ ### Working with Custom Groups
118
+ ```typescript
119
+ // On-the-fly registration
120
+ ErrorCenter.on({
121
+ group: 'upload',
122
+ code: 'SIZE_LIMIT',
123
+ label: 'File Too Large',
124
+ message: 'Max 5MB'
125
+ });
95
126
  ```
@@ -2,94 +2,125 @@ import {Meta} from '@storybook/addon-docs/blocks'
2
2
 
3
3
  <Meta title='@dxtmisha/ru/functional-basic/Classes/ErrorCenter - Управление ошибками'/>
4
4
 
5
- # ErrorCenter
5
+ # Класс ErrorCenter
6
6
 
7
- Статическая обертка для `ErrorCenterInstance`, предоставляющая централизованное управление хранением, извлечением и обработкой ошибок. Он выступает в роли глобального реестра причин ошибок и предоставляет механизм для регистрации и вызова пользовательских обработчиков для различных групп ошибок.
7
+ `ErrorCenter` это центральный инструмент для управления всеми ошибками в приложении. Он позволяет в одном месте регистрировать возможные причины ошибок, настраивать реакцию на них (например, показ уведомлений) и вызывать их из любой части кода.
8
8
 
9
- Класс следует паттерну "Статического моста", делегируя все операции синглтон-экземпляру, сохраняя при этом чистый, глобально доступный API.
9
+ Класс работает как статическая обертка (Static Bridge), направляя все запросы к единственному экземпляру `ErrorCenterInstance`.
10
10
 
11
- ## Ключевые особенности
11
+ ## Методы
12
12
 
13
- - **Статический доступ** — глобальный статус к управлению ошибками без необходимости ручного создания экземпляров.
14
- - **Централизованный реестр**хранит стандартизированные причины ошибок для единообразной обратной связи.
15
- - **Групповая обработка** — позволяет регистрировать несколько функций обратного вызова для конкретных категорий.
16
- - **Chainable API** — методы добавления причин и обработчиков поддерживают цепочки вызовов.
17
- - **Предустановленные значения** — по умолчанию настроен стандартными сетевыми ошибками (`timeout`, `offline`, `notFound` и т.д.).
13
+ ### Действие
14
+ - `on(cause: ErrorCenterCauseItem): void` Запускает процесс обработки. Ищет данные в реестре, объединяет их и вызывает нужные функции обратного вызова.
18
15
 
19
- ## Методы проверки
16
+ ### Проверка
17
+ - `has(code: string, group?: string): boolean` — Проверяет, зарегистрирована ли ошибка.
18
+ - `get(code: string, group?: string): ErrorCenterCauseItem | undefined` — Возвращает данные ошибки из реестра.
20
19
 
21
- - `has(code: string, group?: string): boolean` — Проверяет наличие причины ошибки в реестре.
22
- - `get(code: string, group?: string): ErrorCenterCauseItem | undefined` — Извлекает полный объект причины ошибки.
20
+ ### Конфигурация
21
+ - `add(cause: ErrorCenterCauseItem): void` — Добавляет одну причину ошибки.
22
+ - `addList(causes: ErrorCenterCauseList): void` — Добавляет список ошибок (массовая регистрация).
23
+ - `addHandler(group: ErrorCenterGroup, handler: ErrorCenterHandlerCallback): void` — Регистрирует реакцию на группу ошибок.
24
+ - `addHandlerList(handlers: ErrorCenterHandlerList): void` — Пакетная регистрация нескольких обработчиков.
23
25
 
24
- ## Получение инстанса
25
-
26
- - `getItem(): ErrorCenterInstance` — Возвращает базовый экземпляр, используемый оберткой.
27
-
28
- ## Конфигурация
29
-
30
- - `add(cause: ErrorCenterCauseItem): this` — Добавляет одну причину ошибки в хранилище.
31
- - `addList(causes: ErrorCenterCauseList): this` — Добавляет список причин ошибок в реестр.
32
- - `addHandler(group: ErrorCenterGroup, handler: ErrorCenterHandlerCallback): this` — Регистрирует функцию обратного вызова для группы.
33
- - `addHandlerList(handlers: ErrorCenterHandlerList): this` — Регистрирует набор обработчиков.
34
-
35
- ## Методы действий
36
-
37
- ### `on`
38
-
39
- Запускает обработку указанной ошибки. Метод ищет предварительно зарегистрированные данные для указанного кода ошибки, объединяет их с входной причиной (`cause`), выполняет все зарегистрированные обработчики для этой группы и выводит ошибку в консоль.
40
-
41
- **Параметры:**
42
- - `cause: ErrorCenterCauseItem` — Причина для запуска. Код и группа обязательны, если причина была зарегистрирована ранее через `add()`.
43
-
44
- **Возвращает:** `this`
26
+ ### Вспомогательные
27
+ - `getItem(): ErrorCenterInstance` — Возвращает внутренний экземпляр класса.
45
28
 
46
29
  ## Типы
47
30
 
48
- ### `ErrorCenterCauseItem`
49
-
50
- Основной объект, используемый для определения причины ошибки.
31
+ #### `ErrorCenterGroup`
32
+ Имя группы (например, 'api', 'auth') или `undefined` для общего обработчика.
51
33
 
52
- - `group?: ErrorCenterGroup` — категория/группа, к которой относится ошибка.
53
- - `code: string` уникальный идентификатор ошибки.
54
- - `label?: string` — понятное человеку название ошибки.
55
- - `message?: string` — подробное описание ошибки.
56
- - `details?: any` — необязательный объект для дополнительных данных.
34
+ #### `ErrorCenterCauseItem`
35
+ Объект, описывающий ошибку: `group`, `code` (обязательно), `priority`, `label`, `message`, `details`.
57
36
 
58
- ### `ErrorCenterGroup`
37
+ ## Руководство по работе
59
38
 
60
- Простое определение типа для категорий ошибок: `string | undefined`.
61
-
62
- ## Стандартные причины ошибок
39
+ ### Шаг 1: Регистрация (Registry)
40
+ Составьте словарь ошибок, чтобы хранить тексты отдельно от кода.
41
+ ```typescript
42
+ ErrorCenter.add({
43
+ group: 'auth',
44
+ code: 'LOGIN_FAILED',
45
+ label: 'Ошибка входа',
46
+ message: 'Неверный пароль.'
47
+ })
48
+ ```
63
49
 
64
- `ErrorCenter` автоматически наполняется следующими стандартными сетевыми причинами:
50
+ ### Шаг 2: Подписка (Handlers)
51
+ Укажите, как приложение должно реагировать на группу ошибок.
52
+ ```typescript
53
+ ErrorCenter.addHandler('auth', (cause) => {
54
+ alert(cause.message);
55
+ });
56
+ ```
65
57
 
66
- - `unknown` **Неизвестная ошибка**: Произошла непредвиденная ошибка. Пожалуйста, попробуйте еще раз.
67
- - `timeout` **Тайм-аут запроса**: Запрос занял слишком много времени. Пожалуйста, проверьте соединение.
68
- - `offline` — **Нет соединения**: Вы находитесь в автономном режиме. Пожалуйста, проверьте интернет-соединение.
69
- - `notFound` **Не найдено**: Запрошенный ресурс не найден.
70
- - `server` — **Ошибка сервера**: Произошла внутренняя ошибка сервера.
58
+ ### Шаг 3: Вызов (Execution)
59
+ Вызовите ошибку по её коду и группе.
60
+ ```typescript
61
+ ErrorCenter.on({ group: 'auth', code: 'LOGIN_FAILED' });
62
+ ```
71
63
 
72
- ## Пример использования
64
+ ## Стандартные причины ошибок
73
65
 
74
- ```javascript
66
+ Класс уже содержит готовые описания для частых ситуаций.
67
+
68
+ #### Группа API (`api`)
69
+ Используется для ошибок сетевых запросов.
70
+ - **forbidden** — Доступ запрещен (403).
71
+ - **notFound** — Ресурс не найден (404).
72
+ - **offline** — Нет интернет-соединения.
73
+ - **server** — Внутренняя ошибка сервера (500).
74
+ - **timeout** — Тайм-аут запроса.
75
+ - **unauthorized** — Ошибка авторизации (401).
76
+ - **unknown** — Неизвестная ошибка.
77
+ - **cacheClear**, **cacheGet**, **cacheRemove**, **cacheSet** — Ошибки при работе с кэшем.
78
+
79
+ #### Группа Intl (`intl`)
80
+ Ошибки при форматировании данных (даты, числа и т.д.).
81
+ - **datetime**, **display**, **number**, **plural**, **relative**.
82
+ - **invalid** — Невалидная дата или неверный формат.
83
+
84
+ #### Группа Storage (`storage`)
85
+ Ошибки при работе с локальным или серверным хранилищем.
86
+ - **context** — Отсутствует контекст.
87
+ - **error** — Общий сбой записи/чтения.
88
+
89
+ #### Прочие группы
90
+ Для данных групп предусмотрен универсальный код ошибки `error`. Вызов осуществляется через `ErrorCenter.on({ group: 'название_группы', code: 'error' })`.
91
+ - **broadcast** — Ошибки при обмене данными между вкладками браузера.
92
+ - **hydration** — Ошибка при синхронизации данных между сервером и клиентом.
93
+ - **share** — Ошибка при попытке поделиться контентом (Sharing API).
94
+ - **transformation** — Ошибка при преобразовании или парсинге данных.
95
+
96
+ ## Примеры
97
+
98
+ ### Интеграция с системой уведомлений
99
+ ```typescript
75
100
  import { ErrorCenter } from '@dxtmisha/functional-basic'
76
101
 
77
- // 1. Настройка глобальных обработчиков
102
+ // Настраиваем один раз при старте приложения
78
103
  ErrorCenter.addHandler('api', (cause) => {
79
- notification.error({
80
- title: cause.label,
81
- message: cause.message
82
- })
83
- })
84
-
85
- // 2. Регистрация специфических причин ошибок
86
- ErrorCenter.add({
87
- group: 'auth',
88
- code: 'token_expired',
89
- label: 'Сессия истекла',
90
- message: 'Ваша сессия истекла. Пожалуйста, войдите снова.'
91
- })
104
+ Toast.show(cause.label || 'Ошибка', cause.message);
105
+ });
106
+
107
+ // Используем в любом сервисе
108
+ async function loadData() {
109
+ try {
110
+ const data = await fetch('/api');
111
+ } catch (e) {
112
+ ErrorCenter.on({ group: 'api', code: 'server', details: e });
113
+ }
114
+ }
115
+ ```
92
116
 
93
- // 3. Вызов ошибки через реестр
94
- ErrorCenter.on({ group: 'auth', code: 'token_expired' })
117
+ ### Работа с кастомными группами
118
+ ```typescript
119
+ // Регистрация на лету
120
+ ErrorCenter.on({
121
+ group: 'upload',
122
+ code: 'SIZE_LIMIT',
123
+ label: 'Файл слишком велик',
124
+ message: 'Максимум 5МБ'
125
+ });
95
126
  ```