@dxtmisha/wiki 0.39.6 → 0.39.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/dist/defineProperty-Bjg6wMoX.js +39 -0
  2. package/dist/library.d.ts +0 -1
  3. package/dist/library.js +25 -25
  4. package/dist/media.js +12 -0
  5. package/dist/storybook.js +26929 -11
  6. package/package.json +1 -1
  7. package/src/library.ts +0 -1
  8. package/src/media/functional/functional-basic/api/api.en.mdx +45 -0
  9. package/src/media/functional/functional-basic/api/api.ru.mdx +45 -0
  10. package/src/media/functional/functional-basic/api/api.vi.mdx +45 -0
  11. package/src/media/functional/functional-basic/classes/Api/Api.en.mdx +54 -54
  12. package/src/media/functional/functional-basic/classes/Api/Api.ru.mdx +54 -54
  13. package/src/media/functional/functional-basic/classes/Api/Api.vi.mdx +54 -54
  14. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.en.mdx +111 -0
  15. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.ru.mdx +111 -0
  16. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.vi.mdx +111 -0
  17. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.en.mdx +32 -0
  18. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.ru.mdx +32 -0
  19. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.vi.mdx +32 -0
  20. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.en.mdx +24 -28
  21. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.ru.mdx +24 -28
  22. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.vi.mdx +24 -28
  23. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.en.mdx +28 -14
  24. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.ru.mdx +33 -19
  25. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.vi.mdx +33 -19
  26. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.en.mdx +56 -0
  27. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.ru.mdx +56 -0
  28. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.vi.mdx +55 -0
  29. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.en.mdx +101 -49
  30. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.ru.mdx +101 -49
  31. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.vi.mdx +98 -47
  32. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.en.mdx +44 -26
  33. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.ru.mdx +45 -27
  34. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.vi.mdx +44 -26
  35. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.en.mdx +50 -21
  36. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.ru.mdx +54 -25
  37. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.vi.mdx +55 -26
  38. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.en.mdx +29 -32
  39. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.ru.mdx +33 -36
  40. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.vi.mdx +33 -36
  41. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.en.mdx +34 -53
  42. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.ru.mdx +33 -52
  43. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.vi.mdx +39 -58
  44. package/src/media/functional/functional-basic/classes/Cache/Cache.en.mdx +7 -4
  45. package/src/media/functional/functional-basic/classes/Cache/Cache.ru.mdx +7 -4
  46. package/src/media/functional/functional-basic/classes/Cache/Cache.vi.mdx +28 -25
  47. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.en.mdx +45 -53
  48. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.ru.mdx +46 -54
  49. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.vi.mdx +47 -55
  50. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.en.mdx +13 -1
  51. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.ru.mdx +13 -1
  52. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.vi.mdx +13 -0
  53. package/src/media/functional/functional-basic/classes/Cookie/Cookie.en.mdx +88 -44
  54. package/src/media/functional/functional-basic/classes/Cookie/Cookie.ru.mdx +88 -44
  55. package/src/media/functional/functional-basic/classes/Cookie/Cookie.vi.mdx +85 -41
  56. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.en.mdx +43 -22
  57. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.ru.mdx +46 -25
  58. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.vi.mdx +43 -22
  59. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.en.mdx +84 -0
  60. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.ru.mdx +84 -0
  61. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.vi.mdx +100 -0
  62. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.en.mdx +153 -0
  63. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.ru.mdx +153 -0
  64. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.vi.mdx +153 -0
  65. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.en.mdx +32 -25
  66. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.ru.mdx +32 -25
  67. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.vi.mdx +32 -27
  68. package/src/media/functional/functional-basic/classes/Datetime/Datetime.en.mdx +36 -4
  69. package/src/media/functional/functional-basic/classes/Datetime/Datetime.ru.mdx +36 -4
  70. package/src/media/functional/functional-basic/classes/Datetime/Datetime.vi.mdx +36 -4
  71. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.en.mdx +101 -70
  72. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.ru.mdx +100 -69
  73. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.vi.mdx +101 -70
  74. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.en.mdx +46 -42
  75. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.ru.mdx +46 -42
  76. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.vi.mdx +46 -42
  77. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.en.mdx +44 -96
  78. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.ru.mdx +44 -96
  79. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.vi.mdx +44 -96
  80. package/src/media/functional/functional-basic/classes/EventItem/EventItem.en.mdx +49 -28
  81. package/src/media/functional/functional-basic/classes/EventItem/EventItem.ru.mdx +21 -0
  82. package/src/media/functional/functional-basic/classes/EventItem/EventItem.vi.mdx +63 -42
  83. package/src/media/functional/functional-basic/classes/Formatters/Formatters.en.mdx +97 -109
  84. package/src/media/functional/functional-basic/classes/Formatters/Formatters.ru.mdx +86 -98
  85. package/src/media/functional/functional-basic/classes/Formatters/Formatters.vi.mdx +99 -111
  86. package/src/media/functional/functional-basic/classes/Geo/Geo.en.mdx +3 -3
  87. package/src/media/functional/functional-basic/classes/Geo/Geo.ru.mdx +5 -5
  88. package/src/media/functional/functional-basic/classes/Geo/Geo.vi.mdx +5 -5
  89. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.en.mdx +83 -40
  90. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.ru.mdx +83 -40
  91. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.vi.mdx +87 -44
  92. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.en.mdx +81 -0
  93. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.ru.mdx +81 -0
  94. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.vi.mdx +81 -0
  95. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.en.mdx +56 -105
  96. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.ru.mdx +53 -102
  97. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.vi.mdx +55 -105
  98. package/src/media/functional/functional-basic/classes/Hash/Hash.en.mdx +18 -7
  99. package/src/media/functional/functional-basic/classes/Hash/Hash.ru.mdx +18 -7
  100. package/src/media/functional/functional-basic/classes/Hash/Hash.vi.mdx +18 -7
  101. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.en.mdx +54 -0
  102. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.ru.mdx +54 -0
  103. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.vi.mdx +54 -0
  104. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.en.mdx +78 -0
  105. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.ru.mdx +78 -0
  106. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.vi.mdx +78 -0
  107. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.en.mdx +50 -0
  108. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.ru.mdx +50 -0
  109. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.vi.mdx +50 -0
  110. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.en.mdx +131 -0
  111. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.ru.mdx +131 -0
  112. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.vi.mdx +131 -0
  113. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.en.mdx +97 -0
  114. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.ru.mdx +97 -0
  115. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.vi.mdx +97 -0
  116. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.en.mdx +13 -5
  117. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.ru.mdx +13 -5
  118. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.vi.mdx +13 -5
  119. package/src/media/functional/functional-basic/functions/anyToString/anyToString.en.mdx +37 -19
  120. package/src/media/functional/functional-basic/functions/anyToString/anyToString.ru.mdx +37 -19
  121. package/src/media/functional/functional-basic/functions/anyToString/anyToString.vi.mdx +35 -17
  122. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.en.mdx +31 -19
  123. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.ru.mdx +31 -19
  124. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.vi.mdx +32 -20
  125. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.en.mdx +29 -15
  126. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.ru.mdx +28 -14
  127. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.vi.mdx +28 -14
  128. package/src/media/functional/functional-basic/functions/capitalize/capitalize.en.mdx +7 -3
  129. package/src/media/functional/functional-basic/functions/capitalize/capitalize.ru.mdx +7 -3
  130. package/src/media/functional/functional-basic/functions/capitalize/capitalize.vi.mdx +7 -3
  131. package/src/media/functional/functional-basic/functions/copyObject/copyObject.en.mdx +17 -13
  132. package/src/media/functional/functional-basic/functions/copyObject/copyObject.ru.mdx +17 -13
  133. package/src/media/functional/functional-basic/functions/copyObject/copyObject.vi.mdx +17 -13
  134. package/src/media/functional/functional-basic/functions/createElement/createElement.en.mdx +2 -0
  135. package/src/media/functional/functional-basic/functions/createElement/createElement.ru.mdx +2 -0
  136. package/src/media/functional/functional-basic/functions/createElement/createElement.vi.mdx +2 -0
  137. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.en.mdx +1 -3
  138. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.ru.mdx +1 -3
  139. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.vi.mdx +1 -3
  140. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.en.mdx +13 -10
  141. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.ru.mdx +14 -11
  142. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.vi.mdx +12 -9
  143. package/src/media/functional/functional-basic/functions/executePromise/executePromise.en.mdx +14 -13
  144. package/src/media/functional/functional-basic/functions/executePromise/executePromise.ru.mdx +15 -14
  145. package/src/media/functional/functional-basic/functions/executePromise/executePromise.vi.mdx +14 -13
  146. package/src/media/functional/functional-basic/functions/forEach/forEach.en.mdx +1 -1
  147. package/src/media/functional/functional-basic/functions/forEach/forEach.ru.mdx +1 -1
  148. package/src/media/functional/functional-basic/functions/forEach/forEach.vi.mdx +1 -1
  149. package/src/media/functional/functional-basic/functions/frame/frame.en.mdx +7 -4
  150. package/src/media/functional/functional-basic/functions/frame/frame.ru.mdx +6 -3
  151. package/src/media/functional/functional-basic/functions/frame/frame.vi.mdx +7 -4
  152. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.en.mdx +34 -0
  153. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.ru.mdx +34 -0
  154. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.vi.mdx +35 -0
  155. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.en.mdx +2 -0
  156. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.ru.mdx +2 -0
  157. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.vi.mdx +2 -0
  158. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.en.mdx +21 -0
  159. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.ru.mdx +21 -0
  160. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.vi.mdx +21 -0
  161. package/src/media/functional/functional-basic/functions/getElementId/getElementId.en.mdx +17 -3
  162. package/src/media/functional/functional-basic/functions/getElementId/getElementId.ru.mdx +17 -3
  163. package/src/media/functional/functional-basic/functions/getElementId/getElementId.vi.mdx +18 -4
  164. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.en.mdx +31 -0
  165. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.ru.mdx +31 -0
  166. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.vi.mdx +31 -0
  167. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.en.mdx +25 -0
  168. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.ru.mdx +25 -0
  169. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.vi.mdx +25 -0
  170. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.en.mdx +11 -4
  171. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.ru.mdx +14 -7
  172. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.vi.mdx +13 -6
  173. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.en.mdx +3 -2
  174. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.ru.mdx +3 -2
  175. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.vi.mdx +3 -2
  176. package/src/media/functional/functional-basic/functions/toNumber/toNumber.en.mdx +25 -9
  177. package/src/media/functional/functional-basic/functions/toNumber/toNumber.ru.mdx +25 -9
  178. package/src/media/functional/functional-basic/functions/toNumber/toNumber.vi.mdx +25 -9
  179. package/src/media/functional/functional-basic/functions/toString/toString.en.mdx +28 -0
  180. package/src/media/functional/functional-basic/functions/toString/toString.ru.mdx +28 -0
  181. package/src/media/functional/functional-basic/functions/toString/toString.vi.mdx +28 -0
  182. package/src/media/functional/ui/about/about.en.mdx +45 -0
  183. package/src/media/functional/ui/about/about.ru.mdx +45 -0
  184. package/src/media/functional/ui/about/about.vi.mdx +45 -0
  185. package/src/media/functional/ui/component/component.en.mdx +104 -0
  186. package/src/media/functional/ui/component/component.ru.mdx +106 -0
  187. package/src/media/functional/ui/component/component.vi.mdx +104 -0
  188. package/src/media/functional/ui/setup/setup.en.mdx +72 -0
  189. package/src/media/functional/ui/setup/setup.ru.mdx +72 -0
  190. package/src/media/functional/ui/setup/setup.vi.mdx +72 -0
  191. package/src/media/functional/ui/wiki-data.en.mdx +114 -0
  192. package/src/media/functional/ui/wiki-data.ru.mdx +114 -0
  193. package/src/media/functional/ui/wiki-data.vi.mdx +114 -0
  194. package/dist/WikiStorybookDescriptions-IKMchHA-.js +0 -26959
@@ -4,84 +4,128 @@ import {Meta} from '@storybook/addon-docs/blocks'
4
4
 
5
5
  # Cookie Class
6
6
 
7
- A seamless, stateful wrapper for managing browser cookies. It automatically syncs between memory and the `document.cookie` DOM API, allowing you to reactively set, retrieve, and delete cookies while ensuring consistent fallback values.
7
+ A seamless wrapper for managing browser cookies. Automatically syncs between memory and the `document.cookie` DOM API, allowing reactive setting, retrieval, and deletion of cookies while ensuring consistent fallback values.
8
+
9
+ Includes tight integration with `CookieStorage` for low-level management and respects global blocking via `CookieBlock`.
8
10
 
9
11
  ## Key Features
10
12
 
11
- - **Memory Sync** — maintains an in-memory record of cookies to prevent unnecessary DOM traversals. Automatically parses `document.cookie` on startup.
12
- - **Environment Aware** — detects if it is running in a DOM environment. In SSR (Server-Side Rendering) or testing (non-DOM), it elegantly degrades to memory-only storage without throwing errors.
13
- - **Global Blocking Control** — integrates securely with `CookieBlock`. If cookie writing is globally disabled (e.g., due to user privacy consent), the `Cookie` class respects this and suspends all outgoing DOM changes.
14
- - **Default/Fallback Logic** — getting a value can lazily initialize it with a default standard if it doesn't already exist.
13
+ - **Memory Sync** — maintains an in-memory record of cookies to prevent unnecessary DOM traversals
14
+ - **Environment Aware** — detects if running in a DOM environment. In SSR or testing, elegantly degrades to memory-only storage
15
+ - **Global Blocking Control** — integrates securely with `CookieBlock`. If cookie writing is globally disabled, the class respects this and suspends all DOM changes
16
+ - **Default/Fallback Logic** — getting a value can lazily initialize it with a default if it doesn't already exist
15
17
 
16
- ## Initialization
18
+ ## Constructor
17
19
 
18
- To initialize the object, call the `Cookie(name)` constructor.
20
+ A `Cookie` instance can be created to manage a specific cookie. If an instance with the same name already exists, it will be returned.
19
21
 
20
22
  **Parameters:**
21
- - `name: string` — the name of the cookie you want to manage.
23
+ - `name: string` — the cookie name to manage
22
24
 
23
- ```typescript
24
- import { Cookie } from '@dxtmisha/functional'
25
+ ## Methods
25
26
 
26
- // 1. Initialize wrapper for the 'theme' cookie
27
- const themeCookie = new Cookie('theme')
28
- ```
27
+ ### Action
28
+
29
+ #### `get`
30
+
31
+ Reads the cookie value. If the value doesn't exist and a default is provided, it will be saved and returned. Supports functions for lazy default value computation.
32
+
33
+ **Parameters:**
34
+ - `defaultValue?: T | string | (() => T | string)` — default value or function returning the value
35
+ - `options?: CookieOptions` — cookie options (used when setting default value)
29
36
 
30
- ## Data Management
37
+ **Returns:** `T | string | undefined` — the cookie value or the assigned default
31
38
 
32
- ### `get`
39
+ #### `set`
33
40
 
34
- Use `get()` to read the cookie. If you pass a default value to `get()`, it will simultaneously save that default if the cookie was previously unset.
41
+ Stores or updates a cookie value with specified options. Supports functions for dynamic value computation. If blocking is active via `CookieBlock`, the value is stored in memory only.
35
42
 
36
43
  **Parameters:**
37
- - `value?: T | string | (() => T | string)` — optional default value or a function returning it.
44
+ - `value?: T | string | (() => T | string)` — the value to store or a function returning the value
45
+ - `options?: CookieOptions` — cookie options (lifetime, SameSite, additional arguments)
38
46
 
39
- **Returns:** `T | string | undefined` — the value from the cookie, or the assigned default.
47
+ **Returns:** `void`
40
48
 
41
- ```javascript
42
- // Will read 'theme', OR set and return 'dark' if it doesn't exist
43
- const currentTheme = themeCookie.get('dark')
44
- ```
49
+ #### `remove`
45
50
 
46
- ### `set`
51
+ Removes a cookie by overwriting it with an empty string and setting Max-Age to `-1`, instructing the browser to instantly delete the record.
47
52
 
48
- Use `set()` to override or create new data. Options allow you to control standard cookie attributes like `age` (Max-Age cache duration in seconds) or `sameSite` policy.
53
+ **Returns:** `void`
49
54
 
50
- **Parameters:**
51
- - `value: T | string | (() => T | string)` — the value to store, or a function returning the value.
52
- - `options?: CookieOptions`configuration for the cookie lifetime and security.
55
+ ### Static Methods
56
+
57
+ - `getInstance<T>(name: string): Cookie<T>` Returns an existing instance or creates a new one by name
58
+
59
+ ### Auxiliary
60
+
61
+ - `CookieStorage.update()` — Updates data from `document.cookie`
62
+
63
+ ## Types
64
+
65
+ ### `CookieOptions`
53
66
 
54
- ```javascript
55
- const userPrefs = new Cookie('preferences')
67
+ Configuration object for cookie parameters:
56
68
 
57
- // Set a simple string
58
- userPrefs.set('{"compact": true}')
69
+ - `age?: number` lifetime in seconds (Max-Age attribute). Default: 7 days (604800 sec)
70
+ - `sameSite?: 'strict' | 'lax'` — SameSite policy. Default: `'strict'`
71
+ - `arguments?: string[]` — additional directives appended to the cookie string
59
72
 
60
- // Set with advanced options
61
- userPrefs.set('{"compact": true}', {
73
+ ## Examples
74
+
75
+ ### Basic Usage
76
+
77
+ ```typescript
78
+ import { Cookie } from '@dxtmisha/functional'
79
+
80
+ // Create instance to manage 'theme' cookie
81
+ const themeCookie = new Cookie('theme')
82
+
83
+ // Read with default value
84
+ const currentTheme = themeCookie.get('dark')
85
+
86
+ // Set value
87
+ themeCookie.set('light')
88
+
89
+ // Set with options
90
+ themeCookie.set('dark', {
62
91
  age: 60 * 60 * 24 * 30, // 30 days
63
92
  sameSite: 'lax'
64
93
  })
94
+
95
+ // Remove
96
+ themeCookie.remove()
65
97
  ```
66
98
 
67
- ### `remove`
99
+ ### Using getInstance
100
+
101
+ ```typescript
102
+ import { Cookie } from '@dxtmisha/functional'
103
+
104
+ // Get or create instance
105
+ const cookie = Cookie.getInstance<string>('user')
68
106
 
69
- Removing a cookie overwrites it with an empty string and sets its Max-Age to `-1`, instructing the browser to instantly delete the record.
107
+ // All getInstance calls with the same name return the same instance
108
+ const sameCookie = Cookie.getInstance<string>('user')
70
109
 
71
- ```javascript
72
- userPrefs.remove()
110
+ console.log(cookie === sameCookie) // true
73
111
  ```
74
112
 
75
- ## Synchronization
113
+ ### CookieBlock Integration
76
114
 
77
- - `updateData(): void` (static) — Updates data from `document.cookie`.
115
+ ```typescript
116
+ import { Cookie, CookieBlock } from '@dxtmisha/functional'
78
117
 
79
- ## CookieOptions
118
+ // Block all write operations
119
+ CookieBlock.set(true)
80
120
 
81
- `CookieOptions` is a configuration object for the `get` and `set` methods:
121
+ const cookie = new Cookie('blocked')
82
122
 
83
- - `age?: number` cookie lifetime in **seconds** (`Max-Age` attribute). Default: 7 days (604800 sec). Automatically set to `-1` when deleting via `remove()`.
84
- - `sameSite?: 'strict' | 'lax'` — the `SameSite` policy. Default: `'strict'` (cookie is only sent on same-site navigations). `'lax'` also allows sending on cross-site GET requests.
85
- - `arguments?: string[]` — additional directives appended to the cookie string (e.g. `'Secure'`, `'Path=/'`, `'Domain=.myapp.com'`).
123
+ // Value is saved in memory, but not in DOM
124
+ cookie.set('value')
86
125
 
126
+ // Unblock
127
+ CookieBlock.set(false)
87
128
 
129
+ // Now writes work normally
130
+ cookie.set('newValue')
131
+ ```
@@ -4,84 +4,128 @@ import {Meta} from '@storybook/addon-docs/blocks'
4
4
 
5
5
  # Класс Cookie
6
6
 
7
- Удобная обертка для управления браузерными куки. Она автоматически синхронизируется между памятью и API DOM `document.cookie`, позволяя вам реактивно устанавливать, извлекать и удалять куки, гарантируя при этом согласованные значения по умолчанию.
7
+ Удобная обертка для управления браузерными куки. Автоматически синхронизируется между памятью и API DOM `document.cookie`, позволяя реактивно устанавливать, извлекать и удалять куки с гарантией согласованных значений по умолчанию.
8
+
9
+ Включает тесную интеграцию с `CookieStorage` для низкоуровневого управления и уважает глобальную блокировку через `CookieBlock`.
8
10
 
9
11
  ## Ключевые особенности
10
12
 
11
- - **Синхронизация с памятью** — поддерживает запись куки в памяти для предотвращения ненужных обращений к DOM. Автоматически парсит `document.cookie` при запуске.
12
- - **Понимание окружения** — определяет, выполняется ли код в среде DOM. В SSR (Server-Side Rendering) или при тестировании (без DOM) она элегантно переходит на хранение только в памяти без выброса ошибок.
13
- - **Глобальный контроль блокировки** — безопасно интегрируется с `CookieBlock`. Если запись куки глобально отключена (например, из-за согласия пользователя на конфиденциальность), класс `Cookie` уважает это и приостанавливает все исходящие изменения в DOM.
14
- - **Логика по умолчанию** — получение значения может лениво инициализировать его стандартом по умолчанию, если оно еще не существует.
13
+ - **Синхронизация с памятью** — поддерживает запись куки в памяти для предотвращения ненужных обращений к DOM
14
+ - **Понимание окружения** — определяет, выполняется ли код в среде DOM. В SSR или при тестировании элегантно переходит на хранение только в памяти
15
+ - **Глобальный контроль блокировки** — безопасно интегрируется с `CookieBlock`. Если запись куки глобально отключена, класс уважает это и приостанавливает все изменения в DOM
16
+ - **Логика по умолчанию** — получение значения может лениво инициализировать его стандартом по умолчанию, если оно еще не существует
15
17
 
16
- ## Инициализация
18
+ ## Конструктор
17
19
 
18
- Для инициализации объекта вызовите конструктор `Cookie(name)`.
20
+ Экземпляр `Cookie` может быть создан для управления конкретным cookie. Если экземпляр с таким именем уже существует, будет возвращен существующий.
19
21
 
20
22
  **Параметры:**
21
- - `name: string` — имя куки, которым вы хотите управлять.
23
+ - `name: string` — имя cookie для управления
22
24
 
23
- ```typescript
24
- import { Cookie } from '@dxtmisha/functional'
25
+ ## Методы
25
26
 
26
- // 1. Инициализация обертки для куки 'theme'
27
- const themeCookie = new Cookie('theme')
28
- ```
27
+ ### Действие
28
+
29
+ #### `get`
30
+
31
+ Читает значение cookie. Если значение не существует и передано значение по умолчанию, оно будет сохранено и возвращено. Поддерживает функции для ленивого вычисления значения по умолчанию.
32
+
33
+ **Параметры:**
34
+ - `defaultValue?: T | string | (() => T | string)` — значение по умолчанию или функция, возвращающая значение
35
+ - `options?: CookieOptions` — параметры cookie (используются при установке значения по умолчанию)
29
36
 
30
- ## Управление данными
37
+ **Возвращает:** `T | string | undefined` — значение из куки или заданное по умолчанию
31
38
 
32
- ### `get`
39
+ #### `set`
33
40
 
34
- Используйте `get()` для его чтения. Если вы передадите значение по умолчанию в `get()`, оно одновременно сохранит это значение по умолчанию, если куки ранее не было установлено.
41
+ Сохраняет или обновляет значение cookie с указанными параметрами. Поддерживает функции для динамического вычисления значения. Если активна блокировка через `CookieBlock`, значение сохраняется только в памяти.
35
42
 
36
43
  **Параметры:**
37
- - `value?: T | string | (() => T | string)` — опциональное значение по умолчанию или функция.
44
+ - `value?: T | string | (() => T | string)` — значение для хранения или функция, возвращающая значение
45
+ - `options?: CookieOptions` — параметры cookie (время жизни, SameSite, дополнительные аргументы)
38
46
 
39
- **Возвращает:** `T | string | undefined` — значение из куки или заданное по умолчанию.
47
+ **Возвращает:** `void`
40
48
 
41
- ```javascript
42
- // Прочитает 'theme', ИЛИ установит и вернет 'dark', если его не существует
43
- const currentTheme = themeCookie.get('dark')
44
- ```
49
+ #### `remove`
45
50
 
46
- ### `set`
51
+ Удаляет cookie, устанавливая пустое значение и Max-Age в `-1`, что заставляет браузер немедленно удалить запись.
47
52
 
48
- Используйте `set()` для переопределения или создания новых данных. Опции позволяют управлять стандартными атрибутами куки, такими как `age` (продолжительность кэширования Max-Age в секундах) или политика `sameSite`.
53
+ **Возвращает:** `void`
49
54
 
50
- **Параметры:**
51
- - `value: T | string | (() => T | string)` — значение для хранения, или функция, возвращающая значение.
52
- - `options?: CookieOptions`конфигурация срока жизни и безопасности куки.
55
+ ### Статические методы
56
+
57
+ - `getInstance<T>(name: string): Cookie<T>` Возвращает существующий экземпляр или создает новый по имени
58
+
59
+ ### Вспомогательные
60
+
61
+ - `CookieStorage.update()` — Обновляет данные из `document.cookie`
62
+
63
+ ## Типы
64
+
65
+ ### `CookieOptions`
53
66
 
54
- ```javascript
55
- const userPrefs = new Cookie('preferences')
67
+ Объект конфигурации для параметров cookie:
56
68
 
57
- // Установка простой строки
58
- userPrefs.set('{"compact": true}')
69
+ - `age?: number` — время жизни в секундах (атрибут Max-Age). По умолчанию: 7 дней (604800 сек)
70
+ - `sameSite?: 'strict' | 'lax'` — политика SameSite. По умолчанию: `'strict'`
71
+ - `arguments?: string[]` — дополнительные директивы для строки cookie
59
72
 
60
- // Установка с расширенными опциями
61
- userPrefs.set('{"compact": true}', {
73
+ ## Примеры
74
+
75
+ ### Базовое использование
76
+
77
+ ```typescript
78
+ import { Cookie } from '@dxtmisha/functional'
79
+
80
+ // Создание экземпляра для управления cookie 'theme'
81
+ const themeCookie = new Cookie('theme')
82
+
83
+ // Чтение с дефолтным значением
84
+ const currentTheme = themeCookie.get('dark')
85
+
86
+ // Установка значения
87
+ themeCookie.set('light')
88
+
89
+ // Установка с параметрами
90
+ themeCookie.set('dark', {
62
91
  age: 60 * 60 * 24 * 30, // 30 дней
63
92
  sameSite: 'lax'
64
93
  })
94
+
95
+ // Удаление
96
+ themeCookie.remove()
65
97
  ```
66
98
 
67
- ### `remove`
99
+ ### Использование getInstance
100
+
101
+ ```typescript
102
+ import { Cookie } from '@dxtmisha/functional'
103
+
104
+ // Получение или создание экземпляра
105
+ const cookie = Cookie.getInstance<string>('user')
68
106
 
69
- Удаление куки перезаписывает его пустой строкой и устанавливает его Max-Age в `-1`, давая браузеру команду немедленно удалить запись.
107
+ // Все вызовы getInstance с одним именем возвращают один и тот же экземпляр
108
+ const sameCookie = Cookie.getInstance<string>('user')
70
109
 
71
- ```javascript
72
- userPrefs.remove()
110
+ console.log(cookie === sameCookie) // true
73
111
  ```
74
112
 
75
- ## Синхронизация
113
+ ### Интеграция с CookieBlock
76
114
 
77
- - `updateData(): void` (static) — Обновляет данные из `document.cookie`.
115
+ ```typescript
116
+ import { Cookie, CookieBlock } from '@dxtmisha/functional'
78
117
 
79
- ## Параметры CookieOptions
118
+ // Блокировка всех операций записи
119
+ CookieBlock.set(true)
80
120
 
81
- `CookieOptions` объект конфигурации для методов `get` и `set`:
121
+ const cookie = new Cookie('blocked')
82
122
 
83
- - `age?: number` время жизни куки в **секундах** (атрибут `Max-Age`). По умолчанию: 7 дней (604800 сек). При удалении (`remove()`) автоматически становится `-1`.
84
- - `sameSite?: 'strict' | 'lax'` — политика `SameSite`. По умолчанию: `'strict'` (куки отправляется только при переходах внутри сайта). `'lax'` — также разрешает отправку при переходах с внешних ссылок (GET-запросы).
85
- - `arguments?: string[]` — массив дополнительных директив, которые добавляются в строку куки (например: `'Secure'`, `'Path=/'`, `'Domain=.myapp.com'`).
123
+ // Значение сохраняется в памяти, но не в DOM
124
+ cookie.set('value')
86
125
 
126
+ // Разблокировка
127
+ CookieBlock.set(false)
87
128
 
129
+ // Теперь запись работает нормально
130
+ cookie.set('newValue')
131
+ ```
@@ -6,82 +6,126 @@ import {Meta} from '@storybook/addon-docs/blocks'
6
6
 
7
7
  Lớp bao đóng cho phép các developer quản trị trực tiếp vùng Browser Cookie. Hệ thống `Cookie` tự cấu hình tính đồng bộ xuyên suốt từ bộ đệm của website (memory record) sang môi trường DOM API `document.cookie`, giúp cho tiến trình thao tác và tạo lập biến theo chuẩn reactive được đáp ứng đầy đủ với các chức năng dự phòng linh hoạt.
8
8
 
9
+ Bao gồm tích hợp chặt chẽ với `CookieStorage` để quản lý cấp thấp và tôn trọng chặn toàn cầu qua `CookieBlock`.
10
+
9
11
  ## Các tính năng chính
10
12
 
11
- - **Đồng bộ hóa Không Gian Bộ Nhớ (Memory Sync)** — lưu giữ cấu trúc ảo cho trình quản lý trạng thái tại server cache, tránh tạo quá nhiều truy vấn lên cấu trúc DOM của cookie. Khi khởi tạo tiến trình nó lập tức bắt/nắm bắt vòng dữ liệu đầu tư của mã node `document.cookie`.
12
- - **Thiết Lập Theo Vùng Môi Trường (Environment Aware)** — có khả năng định vị khu sinh thái DOM. Với vùng Render SSR (Server-Side Rendering) hoặc Unit Test, tính năng bắt cookie vẫn giả lập môi trường ảo dựa trên biến cache để tránh phát sinh bug văng lỗi gián đoạn do không truy vấn được DOM window.
13
- - **Tính Năng Chặn Toàn Quyền (Global Cookie Blocking)** — kế nối bảo mật theo bộ thư viện của quy chế `CookieBlock`. Nếu website đánh mã dừng cấp quyền hoạt động cookie theo chính sách riêng tư bảo vệ người dùng, Class Cookie sẽ dừng tất cả chức năng sinh tác dữ liệu lên DOM theo đúng giao thức.
14
- - **Hỗ Trợ Luồng Code Default (Fallback/Default)** — cho phép nạp biến đệm vào làm dữ liệu phụ và sinh cấu trúc từ giá trị phụ đó khi giá trị thật vẫn đang bị mất/rỗng.
13
+ - **Đồng bộ hóa Không Gian Bộ Nhớ (Memory Sync)** — lưu giữ cấu trúc ảo cho trình quản lý trạng thái tại server cache, tránh tạo quá nhiều truy vấn lên cấu trúc DOM của cookie. Khi khởi tạo tiến trình nó lập tức bắt/nắm bắt vòng dữ liệu đầu tư của mã node `document.cookie`
14
+ - **Thiết Lập Theo Vùng Môi Trường (Environment Aware)** — có khả năng định vị khu sinh thái DOM. Với vùng Render SSR (Server-Side Rendering) hoặc Unit Test, tính năng bắt cookie vẫn giả lập môi trường ảo dựa trên biến cache để tránh phát sinh bug văng lỗi gián đoạn do không truy vấn được DOM window
15
+ - **Tính Năng Chặn Toàn Quyền (Global Cookie Blocking)** — kế nối bảo mật theo bộ thư viện của quy chế `CookieBlock`. Nếu website đánh mã dừng cấp quyền hoạt động cookie theo chính sách riêng tư bảo vệ người dùng, Class Cookie sẽ dừng tất cả chức năng sinh tác dữ liệu lên DOM theo đúng giao thức
16
+ - **Hỗ Trợ Luồng Code Default (Fallback/Default)** — cho phép nạp biến đệm vào làm dữ liệu phụ và sinh cấu trúc từ giá trị phụ đó khi giá trị thật vẫn đang bị mất/rỗng
15
17
 
16
- ## Khởi tạo
18
+ ## Constructor
17
19
 
18
- Để khởi tạo đối tượng, hãy gọi hàm khởi tạo `Cookie(name)`.
20
+ Phiên bản `Cookie` có thể được tạo để quản lý cookie cụ thể. Nếu phiên bản với cùng tên đã tồn tại, phiên bản hiện sẽ được trả về.
19
21
 
20
22
  **Tham số:**
21
- - `name: string` — tên của cookie bạn muốn quản lý.
23
+ - `name: string` — tên cookie để quản
22
24
 
23
- ```typescript
24
- import { Cookie } from '@dxtmisha/functional'
25
+ ## Phương thức
25
26
 
26
- // 1. Mảng giao tiếp lấy biến 'theme' cookie
27
- const themeCookie = new Cookie('theme')
28
- ```
27
+ ### Hành động
28
+
29
+ #### `get`
30
+
31
+ Khi chạy `get()`, nếu cung cấp một đoạn code tĩnh phụ, class sẽ so khớp. Trường hợp lúc này không thấy thông số cookie trên hệ điều hành, đoạn code tĩnh lập tức ghi vào cấu trúc và lưu lại lên trình duyệt. Hỗ trợ các hàm để tính toán giá trị mặc định một cách lười.
32
+
33
+ **Tham số:**
34
+ - `defaultValue?: T | string | (() => T | string)` — cấu trúc dự phòng mặc định hoặc callback function
35
+ - `options?: CookieOptions` — tham số cookie (sử dụng khi đặt giá trị mặc định)
29
36
 
30
- ## Quản dữ liệu
37
+ **Trả về:** `T | string | undefined` — biến lấy từ cookie hoặc dữ liệu phụ trợ
31
38
 
32
- ### `get`
39
+ #### `set`
33
40
 
34
- Khi chạy `get()`, nếu cung cấp một đoạn code tĩnh phụ, class sẽ so khớp. Trường hợp lúc này không thấy thông số cookie trên hệ điều hành, đoạn code tĩnh lập tức ghi vào cấu trúc và lưu lại lên trình duyệt.
41
+ Sử dụng `set()` để nạp hoặc làm đệm chèn đè lên biến trước. Những chuẩn tham số bổ sung còn quản cả chuẩn cookie thông dụng `age` (Max-Age cache thiết đặt quy đổi theo giây)trạng thái của các `sameSite`. Nếu chặn đang hoạt động qua `CookieBlock`, giá trị chỉ được lưu trong bộ nhớ.
35
42
 
36
43
  **Tham số:**
37
- - `value?: T | string | (() => T | string)` — cấu trúc dự phòng mặc định hoặc callback function.
44
+ - `value?: T | string | (() => T | string)` — tham chiếu dùng đăng tạo vào cookie, hoặc trỏ lên một mảng rỗng để tính function tạo cấu trúc thay vì nhập chay string
45
+ - `options?: CookieOptions` — phần tham số hỗ trợ định tuổi tồn tại và cấu hình thông số cấp quyền mở rộng của cookie
38
46
 
39
- **Trả về:** `T | string | undefined` — biến lấy từ cookie hoặc dữ liệu phụ trợ.
47
+ **Trả về:** `void`
40
48
 
41
- ```javascript
42
- // Tìm hệ thống node 'theme', HOẶC gán/đóng gói 'dark' trả lại cho giá trị nếu web rỗng
43
- const currentTheme = themeCookie.get('dark')
44
- ```
49
+ #### `remove`
45
50
 
46
- ### `set`
51
+ Tập lệnh thực thi việc đẩy một mảng thông số rỗng bằng string trắng vào vùng cookie, sau đó cập nhật vòng đời thuộc tính Max-Age thành `-1`. Lúc này máy khách sẽ hiểu trình truy xuất cần dừng hoạt động, đẩy lùi chu kỳ hết hạn và loại cookie ngay rực khắc.
47
52
 
48
- Sử dụng `set()` để nạp hoặc làm đệm chèn đè lên biến trước. Những chuẩn tham số bổ sung còn quản lý cả chuẩn cookie thông dụng là `age` (Max-Age cache thiết đặt quy đổi theo giây) và trạng thái của các `sameSite`.
53
+ **Trả về:** `void`
49
54
 
50
- **Tham số:**
51
- - `value: T | string | (() => T | string)` — tham chiếu dùng đăng ký tạo vào cookie, hoặc trỏ lên một mảng rỗng để tính function tạo cấu trúc thay vì nhập chay string.
52
- - `options?: CookieOptions`phần tham số hỗ trợ định tuổi tồn tại cấu hình thông số cấp quyền mở rộng của cookie.
55
+ ### Phương thức tĩnh
56
+
57
+ - `getInstance<T>(name: string): Cookie<T>` Trả về phiên bản hiện hoặc tạo mới theo tên
58
+
59
+ ### Hỗ trợ
60
+
61
+ - `CookieStorage.update()` — Cập nhật dữ liệu từ thư mục `document.cookie` nằm trên browser
62
+
63
+ ## Các loại
64
+
65
+ ### `CookieOptions`
53
66
 
54
- ```javascript
55
- const userPrefs = new Cookie('preferences')
67
+ Đối tượng cấu hình cho các phương thức `get` và `set`:
68
+
69
+ - `age?: number` — thời gian sống của cookie tính bằng **giây** (thuộc tính `Max-Age`). Mặc định: 7 ngày (604800 giây). Tự động đặt thành `-1` khi xóa qua `remove()`
70
+ - `sameSite?: 'strict' | 'lax'` — chính sách `SameSite`. Mặc định: `'strict'` (cookie chỉ được gửi khi điều hướng trong cùng trang web). `'lax'` cũng cho phép gửi khi điều hướng từ liên kết ngoài (GET request)
71
+ - `arguments?: string[]` — các chỉ thị bổ sung được nối vào chuỗi cookie (ví dụ: `'Secure'`, `'Path=/'`, `'Domain=.myapp.com'`)
72
+
73
+ ## Ví dụ
74
+
75
+ ### Sử dụng cơ bản
76
+
77
+ ```typescript
78
+ import { Cookie } from '@dxtmisha/functional'
79
+
80
+ // Mảng giao tiếp lấy biến 'theme' cookie
81
+ const themeCookie = new Cookie('theme')
82
+
83
+ // Tìm hệ thống node 'theme', HOẶC gán/đóng gói 'dark' trả lại cho giá trị nếu web rỗng
84
+ const currentTheme = themeCookie.get('dark')
56
85
 
57
86
  // Cấu trúc text / string đơn thuần
58
- userPrefs.set('{"compact": true}')
87
+ themeCookie.set('light')
59
88
 
60
89
  // Trỏ cấu hình tuỳ chỉnh đa hệ
61
- userPrefs.set('{"compact": true}', {
90
+ themeCookie.set('dark', {
62
91
  age: 60 * 60 * 24 * 30, // Xử lý cache quy về 30 ngày vòng lặp
63
92
  sameSite: 'lax'
64
93
  })
94
+
95
+ // Xóa
96
+ themeCookie.remove()
65
97
  ```
66
98
 
67
- ### `remove`
99
+ ### Sử dụng getInstance
100
+
101
+ ```typescript
102
+ import { Cookie } from '@dxtmisha/functional'
103
+
104
+ // Lấy hoặc tạo phiên bản
105
+ const cookie = Cookie.getInstance<string>('user')
68
106
 
69
- Tập lệnh thực thi việc đẩy một mảng thông số rỗng bằng string trắng vào vùng cookie, sau đó cập nhật vòng đời thuộc tính Max-Age thành `-1`. Lúc này máy khách sẽ hiểu trình truy xuất cần dừng hoạt động, đẩy lùi chu kỳ hết hạn và loại cookie ngay rức khắc.
107
+ // Tất cả các cuộc gọi getInstance với cùng một tên trả về cùng một phiên bản
108
+ const sameCookie = Cookie.getInstance<string>('user')
70
109
 
71
- ```javascript
72
- userPrefs.remove()
110
+ console.log(cookie === sameCookie) // true
73
111
  ```
74
112
 
75
- ## Đồng bộ hóa
113
+ ### Tích hợp với CookieBlock
76
114
 
77
- - `updateData(): void` (static) — Lệnh tĩnh giúp cập nhật dữ liệu từ thư mục `document.cookie` nằm trên browser.
115
+ ```typescript
116
+ import { Cookie, CookieBlock } from '@dxtmisha/functional'
78
117
 
79
- ## CookieOptions
118
+ // Chặn tất cả hoạt động ghi
119
+ CookieBlock.set(true)
80
120
 
81
- `CookieOptions` đối tượng cấu hình cho các phương thức `get` và `set`:
121
+ const cookie = new Cookie('blocked')
82
122
 
83
- - `age?: number` thời gian sống của cookie tính bằng **giây** (thuộc tính `Max-Age`). Mặc định: 7 ngày (604800 giây). Tự động đặt thành `-1` khi xóa qua `remove()`.
84
- - `sameSite?: 'strict' | 'lax'` — chính sách `SameSite`. Mặc định: `'strict'` (cookie chỉ được gửi khi điều hướng trong cùng trang web). `'lax'` cũng cho phép gửi khi điều hướng từ liên kết ngoài (GET request).
85
- - `arguments?: string[]` — các chỉ thị bổ sung được nối vào chuỗi cookie (ví dụ: `'Secure'`, `'Path=/'`, `'Domain=.myapp.com'`).
123
+ // Giá trị được lưu trong bộ nhớ, nhưng không phải DOM
124
+ cookie.set('value')
86
125
 
126
+ // Mở chặn
127
+ CookieBlock.set(false)
87
128
 
129
+ // Bây giờ ghi hoạt động bình thường
130
+ cookie.set('newValue')
131
+ ```
@@ -4,54 +4,75 @@ import {Meta} from '@storybook/addon-docs/blocks'
4
4
 
5
5
  # CookieBlock Class
6
6
 
7
- A static utility class that serves as a global "kill switch" for DOM cookie modifications. It provides a simple boolean state that other classes, specifically `Cookie`, check before attempting to write to `document.cookie`.
7
+ A static utility class that serves as a global "kill switch" for DOM cookie modifications. Provides a simple boolean state that other classes, specifically `Cookie`, check before attempting to write to `document.cookie`.
8
+
9
+ Includes tight integration with `ServerStorage` for request-level state isolation in SSR environments.
8
10
 
9
11
  ## Key Features
10
12
 
11
- - **Global Truth** — a single configuration point to halt cookie operations application-wide.
12
- - **Privacy Compliance** — extremely useful for implementing "Cookie Consent" banners. Simply set the block to `true` until the user explicitly accepts all cookies.
13
- - **DataStorage Backed** — uses the `DataStorage` abstraction internally to maintain the blocked state reliably.
13
+ - **Global Truth** — a single configuration point to halt cookie operations application-wide
14
+ - **Privacy Compliance** — extremely useful for implementing "Cookie Consent" banners
15
+ - **SSR Compatible** — uses `ServerStorage` to reliably maintain the blocked state in isolated request contexts
14
16
 
17
+ ## Static Methods
15
18
 
16
- Since all methods are `static`, you interact with the class directly.
19
+ ### Action
17
20
 
18
- ## Access Management
21
+ #### `set`
19
22
 
20
- ### `get`
23
+ Enables or disables cookie writing capabilities. When set to `true`, all write operations will only save data in memory without touching `document.cookie`.
21
24
 
22
- Use the `get()` method to read the current blocking status. This returns a boolean.
25
+ **Parameters:**
26
+ - `value: boolean` — `true` to block cookie writes, `false` to allow them
23
27
 
24
- **Returns:** `boolean` — `true` if cookie writing is blocked.
28
+ **Returns:** `void`
25
29
 
26
- ```javascript
27
- if (CookieBlock.get()) {
28
- console.log('Cookie writes are currently blocked by user settings.')
29
- }
30
- ```
30
+ ### Check
31
31
 
32
- ### `set`
32
+ - `get(): boolean` — Returns the current blocking status. `true` if cookie writing is blocked
33
33
 
34
- Use the `set()` method to enable or disable cookie writing capabilities.
34
+ ## Examples
35
35
 
36
- **Parameters:**
37
- - `value: boolean` — `true` to block cookie writes, `false` to allow them.
36
+ ### Basic Usage
38
37
 
39
- ```javascript
38
+ ```typescript
40
39
  import { CookieBlock } from '@dxtmisha/functional'
41
40
 
42
41
  // Block all future DOM cookie writes
43
42
  CookieBlock.set(true)
44
43
 
44
+ if (CookieBlock.get()) {
45
+ console.log('Cookie writes are currently blocked')
46
+ }
47
+
45
48
  // Allow DOM cookie writes (default behavior)
46
49
  CookieBlock.set(false)
47
50
  ```
48
51
 
52
+ ### Cookie Consent Banner Implementation
53
+
54
+ ```typescript
55
+ import { CookieBlock, Cookie } from '@dxtmisha/functional'
56
+
57
+ // Block cookies on app load
58
+ CookieBlock.set(true)
59
+
60
+ // After user accepts cookies
61
+ function onCookieConsentAccepted() {
62
+ CookieBlock.set(false)
63
+
64
+ // Now we can set cookies
65
+ const theme = new Cookie('theme')
66
+ theme.set('dark')
67
+ }
68
+ ```
69
+
49
70
  ## How It Interacts With `Cookie`
50
71
 
51
72
  The core `Cookie` class strictly monitors this block. If `CookieBlock.get()` returns `true`:
52
73
 
53
- 1. Your application logic can still technically call `cookieInstance.set('value')`.
54
- 2. The `Cookie` instance will update its *internal memory storage* to the new value.
55
- 3. The `Cookie` instance **will silently refuse** to execute the actual `document.cookie = ...` DOM write.
74
+ 1. Your application logic can still technically call `cookieInstance.set('value')`
75
+ 2. The `Cookie` instance will update its *internal memory storage* to the new value
76
+ 3. The `Cookie` instance **will silently refuse** to execute the actual `document.cookie = ...` DOM write
56
77
 
57
78
  This guarantees your app doesn't break from undefined reads in memory while strictly honoring the browser's disk persistence settings.