@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
@@ -1,27 +1,31 @@
1
- import { Meta } from '@storybook/addon-docs/blocks'
1
+ import { Meta, Source } from '@storybook/addon-docs/blocks'
2
2
 
3
3
  <Meta title='@dxtmisha/en/functional-basic/Functions/copyObject - Copy an object'/>
4
4
 
5
5
  # `copyObject`
6
6
 
7
- Creates a deep copy of objects and arrays containing basic data types.
8
-
9
- This is useful when you need to avoid mutating the original state. Keep in mind that it does not copy functions, symbols, or `undefined` values, and it cannot handle circular references (under the hood it uses `JSON.parse(JSON.stringify(value))`).
7
+ Creates a deep copy of an object for independent data management. The goal of the method is to obtain a completely separate instance of the data to prevent unintended mutations in the original object.
10
8
 
11
9
  **Parameters:**
12
- - `value: T` — The object or value to be copied.
10
+ - `value: T` — The object or array to be copied.
13
11
 
14
12
  **Returns:**
15
13
  `T` — A new copy of the object.
16
14
 
17
- ```typescript
18
- import { copyObject } from '@dxtmisha/functional-basic'
15
+ ## Examples
19
16
 
20
- const original = { name: 'John', details: { age: 30 } }
21
- const copy = copyObject(original)
17
+ <Source
18
+ language='typescript'
19
+ code={`
20
+ import { copyObject } from '@dxtmisha/functional-basic'
22
21
 
23
- copy.details.age = 31
22
+ const original = {
23
+ name: 'John',
24
+ age: 30,
25
+ details: { role: 'admin' }
26
+ }
24
27
 
25
- console.log(original.details.age) // 30 (the original object did not change)
26
- console.log(copy.details.age) // 31
27
- ```
28
+ const copy = copyObject(original)
29
+ // copy is a completely new object for independent management
30
+ `}
31
+ />
@@ -1,27 +1,31 @@
1
- import { Meta } from '@storybook/addon-docs/blocks'
1
+ import { Meta, Source } from '@storybook/addon-docs/blocks'
2
2
 
3
3
  <Meta title='@dxtmisha/ru/functional-basic/Functions/copyObject - Копирование объекта'/>
4
4
 
5
5
  # `copyObject`
6
6
 
7
- Создает глубокую копию (deep copy) объектов и массивов, содержащих базовые типы данных.
8
-
9
- Это полезно, когда нужно избежать мутаций исходного состояния. Однако следует помнить, что утилита не копирует функции, символы, значения `undefined` и не может обработать циклические ссылки (внутри используется `JSON.parse(JSON.stringify(value))`).
7
+ Создает глубокую копию объекта для независимого управления данными. Цель метода получить полностью новый отдельный экземпляр данных во избежание нежелательных мутаций в исходном объекте.
10
8
 
11
9
  **Параметры:**
12
- - `value: T` — Объект или значение, которое необходимо скопировать.
10
+ - `value: T` — Объект или массив, который необходимо скопировать.
13
11
 
14
12
  **Возвращает:**
15
13
  `T` — Новая копия объекта.
16
14
 
17
- ```typescript
18
- import { copyObject } from '@dxtmisha/functional-basic'
15
+ ## Примеры
19
16
 
20
- const original = { name: 'John', details: { age: 30 } }
21
- const copy = copyObject(original)
17
+ <Source
18
+ language='typescript'
19
+ code={`
20
+ import { copyObject } from '@dxtmisha/functional-basic'
22
21
 
23
- copy.details.age = 31
22
+ const original = {
23
+ name: 'John',
24
+ age: 30,
25
+ details: { role: 'admin' }
26
+ }
24
27
 
25
- console.log(original.details.age) // 30 (исходный объект не изменился)
26
- console.log(copy.details.age) // 31
27
- ```
28
+ const copy = copyObject(original)
29
+ // copy это полностью новый экземпляр для независимого управления
30
+ `}
31
+ />
@@ -1,27 +1,31 @@
1
- import { Meta } from '@storybook/addon-docs/blocks'
1
+ import { Meta, Source } from '@storybook/addon-docs/blocks'
2
2
 
3
3
  <Meta title='@dxtmisha/vi/functional-basic/Functions/copyObject - Sao chép đối tượng'/>
4
4
 
5
5
  # `copyObject`
6
6
 
7
- Tạo bản sao sâu (deep copy) của các đối tượng mảng chứa các kiểu dữ liệu bản.
8
-
9
- Điều này hữu ích khi bạn cần tránh thay đổi trực tiếp dữ liệu (mutate) của trạng thái ban đầu. Hãy nhớ rằng nó không sao chép các hàm, ký hiệu symbols, giá trị `undefined` và không thể xử lý các tham chiếu vòng (circular references) (do tiện ích sử dụng `JSON.parse(JSON.stringify(value))`).
7
+ Tạo bản sao sâu của đối tượng để quản lý dữ liệu độc lập. Mục tiêu của phương thức được một phiên bản riêng biệt hoàn toàn mới của dữ liệu để tránh các thay đổi ngoài ý muốn đối với đối tượng gốc.
10
8
 
11
9
  **Tham số:**
12
- - `value: T` — Đối tượng hoặc giá trị cần sao chép.
10
+ - `value: T` — Đối tượng hoặc mảng cần sao chép.
13
11
 
14
12
  **Trả về:**
15
13
  `T` — Bản sao mới của đối tượng.
16
14
 
17
- ```typescript
18
- import { copyObject } from '@dxtmisha/functional-basic'
15
+ ## Ví dụ
19
16
 
20
- const original = { name: 'John', details: { age: 30 } }
21
- const copy = copyObject(original)
17
+ <Source
18
+ language='typescript'
19
+ code={`
20
+ import { copyObject } from '@dxtmisha/functional-basic'
22
21
 
23
- copy.details.age = 31
22
+ const original = {
23
+ name: 'John',
24
+ age: 30,
25
+ details: { role: 'admin' }
26
+ }
24
27
 
25
- console.log(original.details.age) // 30 (đối tượng gốc không bị thay đổi)
26
- console.log(copy.details.age) // 31
27
- ```
28
+ const copy = copyObject(original)
29
+ // copy một phiên bản hoàn toàn mới để quản lý độc lập
30
+ `}
31
+ />
@@ -8,6 +8,8 @@ In a browser environment, creates a new HTML element with the specified tag name
8
8
 
9
9
  The function relies on `isDomRuntime()` to verify the presence of a DOM environment. If the code executes outside the browser (e.g., during SSR on the server), the function will return `undefined`.
10
10
 
11
+ > **Warning (SSR):** When running on the server, the function always returns `undefined`. If you use it within a component's rendering logic, it may lead to hydration mismatches. It is recommended to call this function only inside lifecycle hooks that run exclusively on the client (e.g., `onMounted` in Vue or `useEffect` in React).
12
+
11
13
  **Parameters:**
12
14
  - `parentElement?: HTMLElement` — The parent element into which the new node will be inserted.
13
15
  - `tagName: string = 'div'` — A string specifying the type of element to create (defaults to `'div'`).
@@ -8,6 +8,8 @@ import { Meta } from '@storybook/addon-docs/blocks'
8
8
 
9
9
  Функция проверяет наличие DOM-окружения с помощью `isDomRuntime()`. Если код выполняется не в браузере (например, на сервере во время SSR), функция вернёт `undefined`.
10
10
 
11
+ > **Внимание (SSR):** При выполнении на сервере функция всегда возвращает `undefined`. Если вы используете её внутри логики рендеринга компонента, это может привести к ошибкам гидратации. Рекомендуется вызывать эту функцию только в хуках жизненного цикла, которые выполняются на клиенте (например, `onMounted` в Vue или `useEffect` в React).
12
+
11
13
  **Параметры:**
12
14
  - `parentElement?: HTMLElement` — Родительский элемент, в который будет вставлен новый узел.
13
15
  - `tagName: string = 'div'` — Строка, определяющая тип создаваемого элемента (по умолчанию `'div'`).
@@ -8,6 +8,8 @@ Trong môi trường trình duyệt, tạo một phần tử HTML mới với th
8
8
 
9
9
  Hàm này kiểm tra sự tồn tại của môi trường DOM thông qua `isDomRuntime()`. Nếu mã không chạy trong trình duyệt (ví dụ: trên máy chủ trong quá trình SSR), hàm sẽ trả về `undefined`.
10
10
 
11
+ > **Cảnh báo (SSR):** Khi chạy trên máy chủ, hàm luôn trả về `undefined`. Nếu bạn sử dụng nó trong logic hiển thị của component, nó có thể dẫn đến lỗi không khớp hyradtion (hydration mismatch). Bạn nên gọi hàm này trong các hook vòng đời chỉ chạy trên client (ví dụ: `onMounted` trong Vue hoặc `useEffect` trong React).
12
+
11
13
  **Tham số:**
12
14
  - `parentElement?: HTMLElement` — Phần tử mẹ sẽ chứa nút DOM mới.
13
15
  - `tagName: string = 'div'` — Chuỗi xác định loại phần tử sẽ được tạo (mặc định là `'div'`).
@@ -6,13 +6,11 @@ import { Meta } from '@storybook/addon-docs/blocks'
6
6
 
7
7
  Encodes special characters in a string (`&`, `<`, `>`, `"`, `'`) into their corresponding HTML entities (`&amp;`, `&lt;`, `&gt;`, `&quot;`, `&#39;`). This is essential for safely inserting user or dynamic text into HTML attributes to prevent XSS attacks.
8
8
 
9
- Additionally, the function trims whitespace from the edges of the string using the `.trim()` method.
10
-
11
9
  **Parameters:**
12
10
  - `text: string` — The string to encode.
13
11
 
14
12
  **Returns:**
15
- `string` — The encoded string, trimmed of extra edge whitespace.
13
+ `string` — The encoded string.
16
14
 
17
15
  ```typescript
18
16
  import { encodeAttribute } from '@dxtmisha/functional-basic'
@@ -6,13 +6,11 @@ import { Meta } from '@storybook/addon-docs/blocks'
6
6
 
7
7
  Кодирует специальные символы в строке (`&`, `<`, `>`, `"`, `'`) в соответствующие HTML-сущности (`&amp;`, `&lt;`, `&gt;`, `&quot;`, `&#39;`). Это необходимо для безопасной вставки пользовательского или динамического текста в HTML-атрибуты для предотвращения XSS-атак.
8
8
 
9
- Кроме того, функция удаляет пробельные символы по краям строки с помощью метода `.trim()`.
10
-
11
9
  **Параметры:**
12
10
  - `text: string` — Строка, которую необходимо закодировать.
13
11
 
14
12
  **Возвращает:**
15
- `string` — Закодированная и очищенная от лишних пробелов по краям строка.
13
+ `string` — Закодированная строка.
16
14
 
17
15
  ```typescript
18
16
  import { encodeAttribute } from '@dxtmisha/functional-basic'
@@ -6,13 +6,11 @@ import { Meta } from '@storybook/addon-docs/blocks'
6
6
 
7
7
  Mã hóa các ký tự đặc biệt trong chuỗi (`&`, `<`, `>`, `"`, `'`) thành các thực thể HTML tương ứng (`&amp;`, `&lt;`, `&gt;`, `&quot;`, `&#39;`). Điều này là cần thiết để chèn văn bản người dùng hoặc văn bản động vào thuộc tính HTML một cách an toàn nhằm phòng chống tấn công XSS.
8
8
 
9
- Hơn nữa, hàm cũng loại bỏ các khoảng trắng ở hai đầu chuỗi bằng phương thức `.trim()`.
10
-
11
9
  **Tham số:**
12
10
  - `text: string` — Chuỗi cần được mã hóa.
13
11
 
14
12
  **Trả về:**
15
- `string` — Chuỗi đã được mã hóa và xóa khoảng trắng dư thừa ở hai đầu.
13
+ `string` — Chuỗi đã được mã hóa.
16
14
 
17
15
  ```typescript
18
16
  import { encodeAttribute } from '@dxtmisha/functional-basic'
@@ -4,25 +4,28 @@ import { Meta } from '@storybook/addon-docs/blocks'
4
4
 
5
5
  # `executeFunction`
6
6
 
7
- A utility that checks the provided argument. If the argument is a function, it executes the function and returns its result. Otherwise, it simply returns the provided argument as is.
7
+ A flexible utility designed to handle arguments that can be either a static value or a function. If the provided argument is a function, `executeFunction` invokes it with the specified arguments and returns the result. Otherwise, it returns the argument itself.
8
8
 
9
- This is extremely useful for handling arguments that can flexibly be either a static value or a function that calculates the value on demand (such as lazy evaluation or dynamic defaults).
9
+ This pattern is highly effective for implementing lazy evaluation, dynamic default values, or configuration properties that can be either fixed or computed.
10
10
 
11
11
  **Parameters:**
12
- - `callback: T | FunctionArgs<any, T>`A value of any type, or a function that returns a value of type `T`.
12
+ - `callback: T | ((...args: any[]) => T)`The value to process. Can be a literal value or a function returning type `T`.
13
+ - `...args: any[]` (optional) — Arguments to pass to the function if `callback` is callable.
13
14
 
14
15
  **Returns:**
15
- `T` — The result of the function execution, or the raw value provided.
16
+ `T` — The result of the function execution or the raw value.
16
17
 
17
18
  ```typescript
18
19
  import { executeFunction } from '@dxtmisha/functional-basic'
19
20
 
20
- // Passing a static value
21
+ // 1. Static value handling
21
22
  console.log(executeFunction('Hello')) // 'Hello'
22
23
 
23
- // Passing a function
24
- const lazyValue = () => {
25
- return 'Loaded lazily'
26
- }
27
- console.log(executeFunction(lazyValue)) // 'Loaded lazily'
24
+ // 2. Dynamic execution
25
+ const getLabel = (prefix: string) => `${prefix}: Dynamic Label`
26
+ console.log(executeFunction(getLabel, 'Admin')) // 'Admin: Dynamic Label'
27
+
28
+ // 3. Conditional logic in caller
29
+ const value = Math.random() > 0.5 ? 'Static' : () => 'Computed'
30
+ console.log(executeFunction(value)) // either 'Static' or 'Computed'
28
31
  ```
@@ -1,28 +1,31 @@
1
1
  import { Meta } from '@storybook/addon-docs/blocks'
2
2
 
3
- <Meta title='@dxtmisha/ru/functional-basic/Functions/executeFunction - Выполнение функции или возврат значения'/>
3
+ <Meta title='@dxtmisha/ru/functional-basic/Functions/executeFunction - Выполнить функцию или вернуть значение'/>
4
4
 
5
5
  # `executeFunction`
6
6
 
7
- Утилита, которая проверяет переданный аргумент. Если аргумент является функцией, он выполняется, и функция возвращает результат этого выполнения. В противном случае, переданный аргумент возвращается как есть (без изменений).
7
+ Универсальная утилита для обработки аргументов, которые могут быть как статическим значением, так и функцией. Если переданный аргумент является функцией, `executeFunction` выполняет его с указанными аргументами и возвращает результат. В противном случае возвращается сам аргумент.
8
8
 
9
- Это полезно для параметров, которые могут быть как статическим значением, так и функцией, вычисляющей это значение по требованию (например, для ленивых вычислений или значений по умолчанию).
9
+ Этот паттерн крайне эффективен для реализации «ленивых» вычислений, динамических значений по умолчанию или свойств конфигурации, которые могут быть как фиксированными, так и вычисляемыми.
10
10
 
11
11
  **Параметры:**
12
- - `callback: T | FunctionArgs<any, T>` — Значение любого типа или функция, возвращающая значение типа `T`.
12
+ - `callback: T | ((...args: any[]) => T)` — Значение для обработки. Может быть литералом или функцией, возвращающей тип `T`.
13
+ - `...args: any[]` (опционально) — Аргументы, которые будут переданы в функцию, если `callback` является вызываемым.
13
14
 
14
15
  **Возвращает:**
15
- `T` — Результат выполнения функции или переданное значение.
16
+ `T` — Результат выполнения функции или само исходное значение.
16
17
 
17
18
  ```typescript
18
19
  import { executeFunction } from '@dxtmisha/functional-basic'
19
20
 
20
- // Передаем статическое значение
21
+ // 1. Обработка статического значения
21
22
  console.log(executeFunction('Привет')) // 'Привет'
22
23
 
23
- // Передаем функцию
24
- const lazyValue = () => {
25
- return 'Загружено лениво'
26
- }
27
- console.log(executeFunction(lazyValue)) // 'Загружено лениво'
24
+ // 2. Динамическое выполнение
25
+ const getLabel = (prefix: string) => `${prefix}: Текст`
26
+ console.log(executeFunction(getLabel, 'Админ')) // 'Админ: Текст'
27
+
28
+ // 3. Гибкая логика вызова
29
+ const value = Math.random() > 0.5 ? 'Статика' : () => 'Вычислено'
30
+ console.log(executeFunction(value)) // 'Статика' или 'Вычислено'
28
31
  ```
@@ -4,12 +4,13 @@ import { Meta } from '@storybook/addon-docs/blocks'
4
4
 
5
5
  # `executeFunction`
6
6
 
7
- Tiện ích kiểm tra đối số được cung cấp. Nếu đối số đó là một hàm, sẽ thực thi hàm trả về kết quả của hàm đó. Trong trường hợp ngược lại, nó đơn giản trả về đối số đầu vào (giữ nguyên).
7
+ Một tiện ích linh hoạt được thiết kế để xử lý các đối số thể là giá trị tĩnh hoặc hàm. Nếu đối số được cung cấp là một hàm, `executeFunction` sẽ gọi hàm đó với các đối số đã chỉ định trả về kết quả. Nếu không, nó sẽ trả về chính đối số đó.
8
8
 
9
- Điều này rất hữu ích cho các tham số thể linh hoạt chấp nhận một giá trị tĩnh hoặc một hàm tính toán giá trị đó theo yêu cầu (ví dụ như khởi tạo chậm/lazy evaluation hoặc giá trị mặc định động).
9
+ hình này rất hiệu quả để triển khai tính toán lười biếng (lazy evaluation), các giá trị mặc định động hoặc các thuộc tính cấu hình thể cố định hoặc được tính toán.
10
10
 
11
11
  **Tham số:**
12
- - `callback: T | FunctionArgs<any, T>` — Giá trị của bất kỳ loại nào, hoặc một hàm trả về giá trị kiểu `T`.
12
+ - `callback: T | ((...args: any[]) => T)` — Giá trị cần xử lý. thể là một giá trị cụ thể hoặc một hàm trả về kiểu `T`.
13
+ - `...args: any[]` (tùy chọn) — Các đối số được truyền vào hàm nếu `callback` có thể gọi được.
13
14
 
14
15
  **Trả về:**
15
16
  `T` — Kết quả của việc thực thi hàm hoặc chính giá trị ban đầu.
@@ -17,12 +18,14 @@ Tiện ích kiểm tra đối số được cung cấp. Nếu đối số đó l
17
18
  ```typescript
18
19
  import { executeFunction } from '@dxtmisha/functional-basic'
19
20
 
20
- // Truyền một giá trị tĩnh
21
+ // 1. Xử giá trị tĩnh
21
22
  console.log(executeFunction('Xin chào')) // 'Xin chào'
22
23
 
23
- // Truyền một hàm
24
- const lazyValue = () => {
25
- return 'Được tải lazy'
26
- }
27
- console.log(executeFunction(lazyValue)) // 'Được tải lazy'
24
+ // 2. Thực thi động
25
+ const getLabel = (prefix: string) => `${prefix}: Nhãn động`
26
+ console.log(executeFunction(getLabel, 'Admin')) // 'Admin: Nhãn động'
27
+
28
+ // 3. Logic điều kiện trong cuộc gọi
29
+ const value = Math.random() > 0.5 ? 'Tĩnh' : () => 'Đã tính toán'
30
+ console.log(executeFunction(value)) // 'Tĩnh' hoặc 'Đã tính toán'
28
31
  ```
@@ -4,29 +4,30 @@ import { Meta } from '@storybook/addon-docs/blocks'
4
4
 
5
5
  # `executePromise`
6
6
 
7
- A utility that safely executes a function and/or awaits the resolution of an asynchronous result (Promise).
7
+ A robust utility for safely executing and awaiting results from flexible sources. It handles synchronous values, Promises, and functions (both synchronous and asynchronous) by ensuring the final result is always resolved and returned as a Promise.
8
8
 
9
- Under the hood, it uses the `executeFunction` utility. If passed a function returning a Promise, `executePromise` executes it and waits for the `Promise` to resolve. If a synchronous value or a regular function returning a synchronous value is passed, the utility immediately returns that result.
9
+ Under the hood, it leverages `executeFunction` to resolve callables and then ensures that if the result is a `Promise`, it is properly awaited.
10
10
 
11
11
  **Parameters:**
12
- - `callback: (() => Promise<T>) | (() => T) | T` — A value, a `Promise`, or a function capable of returning a `Promise` or a plain value.
12
+ - `callback: ((...args: any[]) => Promise<T>) | ((...args: any[]) => T) | T` — The source to execute or resolve.
13
+ - `...args: any[]` (optional) — Arguments to pass to the function if `callback` is callable.
13
14
 
14
15
  **Returns:**
15
- `Promise<T>` — A promise resolving to the provided or computed value.
16
+ `Promise<T>` — A promise that resolves to the final computed or provided value.
16
17
 
17
18
  ```typescript
18
19
  import { executePromise } from '@dxtmisha/functional-basic'
19
20
 
20
- // With an async function
21
- const fetchData = async () => {
22
- return await fetch('/api/data').then(res => res.json())
21
+ // 1. Awaiting an async function
22
+ const fetchData = async (id: number) => {
23
+ return await fetch(`/api/user/${id}`).then(res => res.json())
23
24
  }
24
- const result1 = await executePromise(fetchData)
25
+ const user = await executePromise(fetchData, 123)
25
26
 
26
- // With a synchronous function
27
- const staticData = () => 'Sync data'
28
- const result2 = await executePromise(staticData)
27
+ // 2. Handling a synchronous function
28
+ const getName = () => 'John Doe'
29
+ const name = await executePromise(getName) // returns Promise resolving to 'John Doe'
29
30
 
30
- // With a static value
31
- const result3 = await executePromise('Data')
31
+ // 3. Resolving a static value
32
+ const result = await executePromise('Immediate Data')
32
33
  ```
@@ -1,32 +1,33 @@
1
1
  import { Meta } from '@storybook/addon-docs/blocks'
2
2
 
3
- <Meta title='@dxtmisha/ru/functional-basic/Functions/executePromise - Выполнение Promise или функции'/>
3
+ <Meta title='@dxtmisha/ru/functional-basic/Functions/executePromise - Выполнить Promise или функцию'/>
4
4
 
5
5
  # `executePromise`
6
6
 
7
- Утилита, которая безопасно выполняет функцию и/или дожидается разрешения асинхронного результата (Promise).
7
+ Надежная утилита для безопасного выполнения и ожидания результатов из различных источников. Она обрабатывает синхронные значения, промисы (Promises) и функции (как синхронные, так и асинхронные), гарантируя, что конечный результат всегда будет разрешен и возвращен в виде промиса.
8
8
 
9
- Внутри используется функция `executeFunction`. Если передан аргумент в виде функции возвращающей промис, `executePromise` выполнит эту функцию и дождётся выполнения `Promise`. Если будет передано синхронное значение или обычная функция, возвращающая синхронное значение, утилита сразу вернёт этот результат.
9
+ Внутренне она использует `executeFunction` для вызова функций, а затем проверяет, является ли результат промисом, чтобы дождаться его завершения.
10
10
 
11
11
  **Параметры:**
12
- - `callback: (() => Promise<T>) | (() => T) | T` — Значение, `Promise` или функция, способная вернуть `Promise` или обычное значение.
12
+ - `callback: ((...args: any[]) => Promise<T>) | ((...args: any[]) => T) | T` — Источник для выполнения или разрешения.
13
+ - `...args: any[]` (опционально) — Аргументы, которые будут переданы в функцию, если `callback` является вызываемым.
13
14
 
14
15
  **Возвращает:**
15
- `Promise<T>` — Промис, разрешающийся в переданное или вычисленное значение.
16
+ `Promise<T>` — Промис, разрешающийся финальным вычисленным или предоставленным значением.
16
17
 
17
18
  ```typescript
18
19
  import { executePromise } from '@dxtmisha/functional-basic'
19
20
 
20
- // С асинхронной функцией
21
- const fetchData = async () => {
22
- return await fetch('/api/data').then(res => res.json())
21
+ // 1. Ожидание асинхронной функции
22
+ const fetchData = async (id: number) => {
23
+ return await fetch(`/api/user/${id}`).then(res => res.json())
23
24
  }
24
- const result1 = await executePromise(fetchData)
25
+ const user = await executePromise(fetchData, 123)
25
26
 
26
- // С обычной функцией
27
- const staticData = () => 'Синхронные данные'
28
- const result2 = await executePromise(staticData)
27
+ // 2. Обработка синхронной функции
28
+ const getName = () => 'Иван Иванов'
29
+ const name = await executePromise(getName) // возвращает Promise, разрешающийся в 'Иван Иванов'
29
30
 
30
- // Со статическим значением
31
- const result3 = await executePromise('Данные')
31
+ // 3. Разрешение статического значения
32
+ const result = await executePromise('Мгновенные данные')
32
33
  ```
@@ -4,29 +4,30 @@ import { Meta } from '@storybook/addon-docs/blocks'
4
4
 
5
5
  # `executePromise`
6
6
 
7
- Một tiện ích thực thi an toàn một hàm và/hoặc chờ đợi kết quả bất đồng bộ (Promise) được hoàn thành.
7
+ Một tiện ích mạnh mẽ để thực thi và chờ đợi kết quả từ các nguồn linh hoạt một cách an toàn. xử lý các giá trị đồng bộ, Promise và các hàm (cả đồng bộ bất đồng bộ) bằng cách đảm bảo kết quả cuối cùng luôn được giải quyết và trả về dưới dạng Promise.
8
8
 
9
- Bản chất bên trong, nó sử dụng tiện ích `executeFunction`. Nếu truyền vào một hàm trả về một Promise, `executePromise` sẽ thực thi hàm đó đợi `Promise` hoàn thành. Nếu truyền vào một giá trị đồng bộ hoặc một hàm thông thường trả về giá trị đồng bộ, tiện ích sẽ trả về ngay kết quả đó.
9
+ Bên dưới, nó tận dụng `executeFunction` để thực thi các hàm và sau đó đảm bảo rằng nếu kết quả một `Promise`, sẽ được chờ đợi (await) đúng cách.
10
10
 
11
11
  **Tham số:**
12
- - `callback: (() => Promise<T>) | (() => T) | T` — Một giá trị, một `Promise`, hoặc một hàm có thể trả về một `Promise` hoặc một giá trị thông thường.
12
+ - `callback: ((...args: any[]) => Promise<T>) | ((...args: any[]) => T) | T` — Nguồn để thực thi hoặc giải quyết.
13
+ - `...args: any[]` (tùy chọn) — Các đối số được truyền vào hàm nếu `callback` có thể gọi được.
13
14
 
14
15
  **Trả về:**
15
- `Promise<T>` — Một promise sẽ được hoàn thành với giá trị được cung cấp hoặc được tính toán.
16
+ `Promise<T>` — Một promise giải quyết thành giá trị cuối cùng được tính toán hoặc được cung cấp.
16
17
 
17
18
  ```typescript
18
19
  import { executePromise } from '@dxtmisha/functional-basic'
19
20
 
20
- // Với hàm async
21
- const fetchData = async () => {
22
- return await fetch('/api/data').then(res => res.json())
21
+ // 1. Chờ đợi một hàm bất đồng bộ
22
+ const fetchData = async (id: number) => {
23
+ return await fetch(`/api/user/${id}`).then(res => res.json())
23
24
  }
24
- const result1 = await executePromise(fetchData)
25
+ const user = await executePromise(fetchData, 123)
25
26
 
26
- // Với hàm đồng bộ
27
- const staticData = () => 'Dữ liệu đồng bộ'
28
- const result2 = await executePromise(staticData)
27
+ // 2. Xử lý một hàm đồng bộ
28
+ const getName = () => 'John Doe'
29
+ const name = await executePromise(getName) // trả về Promise giải quyết thành 'John Doe'
29
30
 
30
- // Với giá trị tĩnh
31
- const result3 = await executePromise('Dữ liệu')
31
+ // 3. Giải quyết một giá trị tĩnh
32
+ const result = await executePromise('Dữ liệu tức thời')
32
33
  ```
@@ -19,7 +19,7 @@ The function performs the specified function once for each element in the object
19
19
  The function is a universal tool for iterating over various data structures and collecting results into an array.
20
20
 
21
21
  **Features:**
22
- - **Type Support** — works with `Array`, `Map`, and standard `Object`.
22
+ - **Type Support** — works with `Array`, `Map`, `Set`, and standard `Object`.
23
23
  - **Result Collection** — unlike the standard `forEach`, this function collects the values returned from the `callback` into a new array.
24
24
  - **Undefined Filtering** — by default, all `undefined` values (e.g., if the callback returned nothing for an element) are filtered out of the resulting array.
25
25
  - **saveUndefined Parameter** — if `true` is passed as the third argument, the array will preserve all results, including `undefined`.
@@ -19,7 +19,7 @@ import { Meta } from '@storybook/addon-docs/blocks'
19
19
  Функция является универсальным инструментом для перебора различных структур данных и сбора результатов в массив.
20
20
 
21
21
  **Особенности:**
22
- - **Поддержка типов** — работает с `Array`, `Map` и обычными объектами (`Object`).
22
+ - **Поддержка типов** — работает с `Array`, `Map`, `Set` и обычными объектами (`Object`).
23
23
  - **Сбор результатов** — в отличие от стандартного `forEach`, эта функция собирает значения, возвращаемые из `callback`, в новый массив.
24
24
  - **Фильтрация undefined** — по умолчанию все значения `undefined` (например, если callback ничего не вернул для элемента) отфильтровываются из итогового массива.
25
25
  - **Параметр saveUndefined** — если передать `true` третьим аргументом, массив сохранит все результаты, включая `undefined`.
@@ -19,7 +19,7 @@ Hàm thực hiện chức năng được chỉ định một lần cho mỗi ph
19
19
  Hàm này là một công cụ vạn năng để lặp qua các cấu trúc dữ liệu khác nhau và thu thập kết quả vào một mảng.
20
20
 
21
21
  **Tính năng:**
22
- - **Hỗ trợ kiểu dữ liệu** — hoạt động với `Array`, `Map` và các đối tượng thông thường (`Object`).
22
+ - **Hỗ trợ kiểu dữ liệu** — hoạt động với `Array`, `Map`, `Set` và các đối tượng thông thường (`Object`).
23
23
  - **Thu thập kết quả** — khác với `forEach` tiêu chuẩn, hàm này thu thập các giá trị được trả về từ `callback` vào một mảng mới.
24
24
  - **Lọc undefined** — theo mặc định, tất cả các giá trị `undefined` (ví dụ: nếu callback không trả về gì cho một phần tử) sẽ bị lọc bỏ khỏi mảng kết quả.
25
25
  - **Tham số saveUndefined** — nếu truyền `true` làm đối số thứ ba, mảng sẽ giữ lại tất cả các kết quả, bao gồm cả `undefined`.
@@ -6,12 +6,15 @@ import { Meta } from '@storybook/addon-docs/blocks'
6
6
 
7
7
  A utility that cyclically calls `requestAnimationFrame` to perform frame-by-frame animation in the browser.
8
8
 
9
- It's useful for creating smooth animations because the browser automatically optimizes the frame rate (typically 60 FPS) and pauses the animation when the tab is inactive. In non-DOM environments (such as SSR), `requestAnimationFrame` is not used, and the function executes the callback synchronously to prevent crashing.
9
+ It's useful for creating smooth animations because the browser automatically optimizes the frame rate (typically 60 FPS) and pauses the animation when the tab is inactive.
10
+
11
+ **SSR Behavior:**
12
+ In non-DOM environments (such as SSR), `requestAnimationFrame` is not used. The function executes the `callback` once synchronously and immediately calls `end` (the loop via `next` is not started) to prevent stack overflow and thread blocking on the server.
10
13
 
11
14
  **Parameters:**
12
- - `callback: () => void` — The function to call when it's time to update your animation for the repaint.
13
- - `next?: () => boolean` — A condition function. If it returns `true`, the animation loop continues. If `false`, the loop stops.
14
- - `end?: () => void` — A callback function that is executed once the animation loop ends (when `next` returns `false`).
15
+ - `callback: () => void` — The function to call to update your animation.
16
+ - `next?: () => boolean` — A condition function. If it returns `true` (only in browser), the animation loop continues.
17
+ - `end?: () => void` — A callback function that is executed once the animation loop ends.
15
18
 
16
19
  **Returns:**
17
20
  `void`
@@ -6,12 +6,15 @@ import { Meta } from '@storybook/addon-docs/blocks'
6
6
 
7
7
  Утилита, которая циклически вызывает `requestAnimationFrame` для выполнения покадровой анимации в браузере.
8
8
 
9
- Она полезна для создания плавных анимаций, поскольку браузер самостоятельно оптимизирует частоту кадров (обычно 60 FPS) и не рисует анимацию, когда вкладка неактивна. В средах без DOM (например, SSR) `requestAnimationFrame` не используется, и функция просто запускает коллбэк синхронно.
9
+ Она полезна для создания плавных анимаций, поскольку браузер самостоятельно оптимизирует частоту кадров (обычно 60 FPS) и не рисует анимацию, когда вкладка неактивна.
10
+
11
+ **SSR поведение:**
12
+ В средах без DOM (например, SSR) `requestAnimationFrame` не используется. Функция выполняет `callback` один раз синхронно и сразу вызывает `end` (цикл через `next` не запускается), чтобы предотвратить переполнение стека и блокировку потока на сервере.
10
13
 
11
14
  **Параметры:**
12
15
  - `callback: () => void` — Функция, которая отрисовывает или обновляет анимацию на каждом кадре.
13
- - `next?: () => boolean` — Функция-условие. Если она возвращает `true`, анимация продолжится в следующем кадре. Если `false` — цикл прерывается.
14
- - `end?: () => void` — Функция, которая будет вызвана один раз, когда `next` вернёт `false` (цикл анимации остановлен).
16
+ - `next?: () => boolean` — Функция-условие. Если она возвращает `true` (только в браузере), анимация продолжится в следующем кадре.
17
+ - `end?: () => void` — Функция, которая будет вызвана один раз, когда цикл анимации завершен.
15
18
 
16
19
  **Возвращает:**
17
20
  `void`
@@ -6,12 +6,15 @@ import { Meta } from '@storybook/addon-docs/blocks'
6
6
 
7
7
  Tiện ích này sẽ gọi vòng lặp `requestAnimationFrame` để thực hiện hoạt ảnh theo từng khung hình (frame-by-frame) trong trình duyệt.
8
8
 
9
- Trình duyệt tự động tối ưu hóa tốc độ khung hình (thường là 60 FPS) và dừng hoạt ảnh khi tab không hoạt động, giúp hiển thị mượt mà. Trong các môi trường không có DOM (chẳng hạn như SSR), `requestAnimationFrame` sẽ không được sử dụng và hàm chỉ thực thi lệnh callback một lần đồng bộ.
9
+ Trình duyệt tự động tối ưu hóa tốc độ khung hình (thường là 60 FPS) và dừng hoạt ảnh khi tab không hoạt động, giúp hiển thị mượt mà.
10
+
11
+ **Hành vi trong SSR:**
12
+ Trong các môi trường không có DOM (chẳng hạn như SSR), `requestAnimationFrame` sẽ không được sử dụng. Hàm thực thi `callback` một lần đồng bộ và gọi ngay lập tức hàm `end` (vòng lặp qua `next` không được bắt đầu) để ngăn chặn tràn ngăn xếp (stack overflow) và chặn luồng trên máy chủ (server thread blocking).
10
13
 
11
14
  **Tham số:**
12
- - `callback: () => void` — Hàm được gọi khi đến thời điểm cập nhật hoạt ảnh cho lần vẽ lại tiếp theo.
13
- - `next?: () => boolean` — Hàm điều kiện. Nếu trả về `true`, vòng lặp hoạt ảnh tiếp tục. Nếu trả về `false`, vòng lặp dừng lại.
14
- - `end?: () => void` — Hàm được thực thi một lần khi vòng lặp hoạt ảnh dừng lại (nghĩa là `next` trả về false).
15
+ - `callback: () => void` — Hàm được gọi để cập nhật hoạt ảnh.
16
+ - `next?: () => boolean` — Hàm điều kiện. Nếu trả về `true` (chỉ trong trình duyệt), vòng lặp hoạt ảnh tiếp tục.
17
+ - `end?: () => void` — Hàm được thực thi một lần khi vòng lặp hoạt ảnh kết thúc.
15
18
 
16
19
  **Trả về:**
17
20
  `void`