@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.
- package/dist/defineProperty-Bjg6wMoX.js +39 -0
- package/dist/library.d.ts +0 -1
- package/dist/library.js +25 -25
- package/dist/media.js +12 -0
- package/dist/storybook.js +26929 -11
- package/package.json +1 -1
- package/src/library.ts +0 -1
- package/src/media/functional/functional-basic/api/api.en.mdx +45 -0
- package/src/media/functional/functional-basic/api/api.ru.mdx +45 -0
- package/src/media/functional/functional-basic/api/api.vi.mdx +45 -0
- package/src/media/functional/functional-basic/classes/Api/Api.en.mdx +54 -54
- package/src/media/functional/functional-basic/classes/Api/Api.ru.mdx +54 -54
- package/src/media/functional/functional-basic/classes/Api/Api.vi.mdx +54 -54
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.en.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.ru.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.vi.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.en.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.ru.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.vi.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.en.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.ru.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.vi.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.en.mdx +28 -14
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.ru.mdx +33 -19
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.vi.mdx +33 -19
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.en.mdx +56 -0
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.ru.mdx +56 -0
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.vi.mdx +55 -0
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.en.mdx +101 -49
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.ru.mdx +101 -49
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.vi.mdx +98 -47
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.en.mdx +44 -26
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.ru.mdx +45 -27
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.vi.mdx +44 -26
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.en.mdx +50 -21
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.ru.mdx +54 -25
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.vi.mdx +55 -26
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.en.mdx +29 -32
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.ru.mdx +33 -36
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.vi.mdx +33 -36
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.en.mdx +34 -53
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.ru.mdx +33 -52
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.vi.mdx +39 -58
- package/src/media/functional/functional-basic/classes/Cache/Cache.en.mdx +7 -4
- package/src/media/functional/functional-basic/classes/Cache/Cache.ru.mdx +7 -4
- package/src/media/functional/functional-basic/classes/Cache/Cache.vi.mdx +28 -25
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.en.mdx +45 -53
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.ru.mdx +46 -54
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.vi.mdx +47 -55
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.en.mdx +13 -1
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.ru.mdx +13 -1
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.vi.mdx +13 -0
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.en.mdx +88 -44
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.ru.mdx +88 -44
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.vi.mdx +85 -41
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.en.mdx +43 -22
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.ru.mdx +46 -25
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.vi.mdx +43 -22
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.en.mdx +84 -0
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.ru.mdx +84 -0
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.vi.mdx +100 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.en.mdx +153 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.ru.mdx +153 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.vi.mdx +153 -0
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.en.mdx +32 -25
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.ru.mdx +32 -25
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.vi.mdx +32 -27
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.en.mdx +36 -4
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.ru.mdx +36 -4
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.vi.mdx +36 -4
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.en.mdx +101 -70
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.ru.mdx +100 -69
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.vi.mdx +101 -70
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.en.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.ru.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.vi.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.en.mdx +44 -96
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.ru.mdx +44 -96
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.vi.mdx +44 -96
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.en.mdx +49 -28
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.ru.mdx +21 -0
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.vi.mdx +63 -42
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.en.mdx +97 -109
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.ru.mdx +86 -98
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.vi.mdx +99 -111
- package/src/media/functional/functional-basic/classes/Geo/Geo.en.mdx +3 -3
- package/src/media/functional/functional-basic/classes/Geo/Geo.ru.mdx +5 -5
- package/src/media/functional/functional-basic/classes/Geo/Geo.vi.mdx +5 -5
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.en.mdx +83 -40
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.ru.mdx +83 -40
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.vi.mdx +87 -44
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.en.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.ru.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.vi.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.en.mdx +56 -105
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.ru.mdx +53 -102
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.vi.mdx +55 -105
- package/src/media/functional/functional-basic/classes/Hash/Hash.en.mdx +18 -7
- package/src/media/functional/functional-basic/classes/Hash/Hash.ru.mdx +18 -7
- package/src/media/functional/functional-basic/classes/Hash/Hash.vi.mdx +18 -7
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.en.mdx +54 -0
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.ru.mdx +54 -0
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.vi.mdx +54 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.en.mdx +78 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.ru.mdx +78 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.vi.mdx +78 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.en.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.ru.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.vi.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.en.mdx +131 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.ru.mdx +131 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.vi.mdx +131 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.en.mdx +97 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.ru.mdx +97 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.vi.mdx +97 -0
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.en.mdx +13 -5
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.ru.mdx +13 -5
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.vi.mdx +13 -5
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.en.mdx +37 -19
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.ru.mdx +37 -19
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.vi.mdx +35 -17
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.en.mdx +31 -19
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.ru.mdx +31 -19
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.vi.mdx +32 -20
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.en.mdx +29 -15
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.ru.mdx +28 -14
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.vi.mdx +28 -14
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.en.mdx +7 -3
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.ru.mdx +7 -3
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.vi.mdx +7 -3
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.en.mdx +17 -13
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.ru.mdx +17 -13
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.vi.mdx +17 -13
- package/src/media/functional/functional-basic/functions/createElement/createElement.en.mdx +2 -0
- package/src/media/functional/functional-basic/functions/createElement/createElement.ru.mdx +2 -0
- package/src/media/functional/functional-basic/functions/createElement/createElement.vi.mdx +2 -0
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.en.mdx +1 -3
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.ru.mdx +1 -3
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.vi.mdx +1 -3
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.en.mdx +13 -10
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.ru.mdx +14 -11
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.vi.mdx +12 -9
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.en.mdx +14 -13
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.ru.mdx +15 -14
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.vi.mdx +14 -13
- package/src/media/functional/functional-basic/functions/forEach/forEach.en.mdx +1 -1
- package/src/media/functional/functional-basic/functions/forEach/forEach.ru.mdx +1 -1
- package/src/media/functional/functional-basic/functions/forEach/forEach.vi.mdx +1 -1
- package/src/media/functional/functional-basic/functions/frame/frame.en.mdx +7 -4
- package/src/media/functional/functional-basic/functions/frame/frame.ru.mdx +6 -3
- package/src/media/functional/functional-basic/functions/frame/frame.vi.mdx +7 -4
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.en.mdx +34 -0
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.ru.mdx +34 -0
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.vi.mdx +35 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.en.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.ru.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.vi.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.en.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.ru.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.vi.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.en.mdx +17 -3
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.ru.mdx +17 -3
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.vi.mdx +18 -4
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.en.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.ru.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.vi.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.en.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.ru.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.vi.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.en.mdx +11 -4
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.ru.mdx +14 -7
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.vi.mdx +13 -6
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.en.mdx +3 -2
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.ru.mdx +3 -2
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.vi.mdx +3 -2
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.en.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.ru.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.vi.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toString/toString.en.mdx +28 -0
- package/src/media/functional/functional-basic/functions/toString/toString.ru.mdx +28 -0
- package/src/media/functional/functional-basic/functions/toString/toString.vi.mdx +28 -0
- package/src/media/functional/ui/about/about.en.mdx +45 -0
- package/src/media/functional/ui/about/about.ru.mdx +45 -0
- package/src/media/functional/ui/about/about.vi.mdx +45 -0
- package/src/media/functional/ui/component/component.en.mdx +104 -0
- package/src/media/functional/ui/component/component.ru.mdx +106 -0
- package/src/media/functional/ui/component/component.vi.mdx +104 -0
- package/src/media/functional/ui/setup/setup.en.mdx +72 -0
- package/src/media/functional/ui/setup/setup.ru.mdx +72 -0
- package/src/media/functional/ui/setup/setup.vi.mdx +72 -0
- package/src/media/functional/ui/wiki-data.en.mdx +114 -0
- package/src/media/functional/ui/wiki-data.ru.mdx +114 -0
- package/src/media/functional/ui/wiki-data.vi.mdx +114 -0
- 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
|
|
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
|
|
12
|
-
- **Environment Aware** — detects if
|
|
13
|
-
- **Global Blocking Control** — integrates securely with `CookieBlock`. If cookie writing is globally disabled
|
|
14
|
-
- **Default/Fallback Logic** — getting a value can lazily initialize it with a default
|
|
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
|
-
##
|
|
18
|
+
## Constructor
|
|
17
19
|
|
|
18
|
-
|
|
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
|
|
23
|
+
- `name: string` — the cookie name to manage
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
import { Cookie } from '@dxtmisha/functional'
|
|
25
|
+
## Methods
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
37
|
+
**Returns:** `T | string | undefined` — the cookie value or the assigned default
|
|
31
38
|
|
|
32
|
-
|
|
39
|
+
#### `set`
|
|
33
40
|
|
|
34
|
-
|
|
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)` —
|
|
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:** `
|
|
47
|
+
**Returns:** `void`
|
|
40
48
|
|
|
41
|
-
|
|
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
|
-
|
|
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
|
-
|
|
53
|
+
**Returns:** `void`
|
|
49
54
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
- `
|
|
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
|
-
|
|
55
|
-
const userPrefs = new Cookie('preferences')
|
|
67
|
+
Configuration object for cookie parameters:
|
|
56
68
|
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
61
|
-
|
|
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
|
-
###
|
|
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
|
-
|
|
107
|
+
// All getInstance calls with the same name return the same instance
|
|
108
|
+
const sameCookie = Cookie.getInstance<string>('user')
|
|
70
109
|
|
|
71
|
-
|
|
72
|
-
userPrefs.remove()
|
|
110
|
+
console.log(cookie === sameCookie) // true
|
|
73
111
|
```
|
|
74
112
|
|
|
75
|
-
|
|
113
|
+
### CookieBlock Integration
|
|
76
114
|
|
|
77
|
-
|
|
115
|
+
```typescript
|
|
116
|
+
import { Cookie, CookieBlock } from '@dxtmisha/functional'
|
|
78
117
|
|
|
79
|
-
|
|
118
|
+
// Block all write operations
|
|
119
|
+
CookieBlock.set(true)
|
|
80
120
|
|
|
81
|
-
|
|
121
|
+
const cookie = new Cookie('blocked')
|
|
82
122
|
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
Удобная обертка для управления браузерными куки.
|
|
7
|
+
Удобная обертка для управления браузерными куки. Автоматически синхронизируется между памятью и API DOM `document.cookie`, позволяя реактивно устанавливать, извлекать и удалять куки с гарантией согласованных значений по умолчанию.
|
|
8
|
+
|
|
9
|
+
Включает тесную интеграцию с `CookieStorage` для низкоуровневого управления и уважает глобальную блокировку через `CookieBlock`.
|
|
8
10
|
|
|
9
11
|
## Ключевые особенности
|
|
10
12
|
|
|
11
|
-
- **Синхронизация с памятью** — поддерживает запись куки в памяти для предотвращения ненужных обращений к DOM
|
|
12
|
-
- **Понимание окружения** — определяет, выполняется ли код в среде DOM. В SSR
|
|
13
|
-
- **Глобальный контроль блокировки** — безопасно интегрируется с `CookieBlock`. Если запись куки глобально
|
|
14
|
-
- **Логика по умолчанию** — получение значения может лениво инициализировать его стандартом по умолчанию, если оно еще не
|
|
13
|
+
- **Синхронизация с памятью** — поддерживает запись куки в памяти для предотвращения ненужных обращений к DOM
|
|
14
|
+
- **Понимание окружения** — определяет, выполняется ли код в среде DOM. В SSR или при тестировании элегантно переходит на хранение только в памяти
|
|
15
|
+
- **Глобальный контроль блокировки** — безопасно интегрируется с `CookieBlock`. Если запись куки глобально отключена, класс уважает это и приостанавливает все изменения в DOM
|
|
16
|
+
- **Логика по умолчанию** — получение значения может лениво инициализировать его стандартом по умолчанию, если оно еще не существует
|
|
15
17
|
|
|
16
|
-
##
|
|
18
|
+
## Конструктор
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
Экземпляр `Cookie` может быть создан для управления конкретным cookie. Если экземпляр с таким именем уже существует, будет возвращен существующий.
|
|
19
21
|
|
|
20
22
|
**Параметры:**
|
|
21
|
-
- `name: string` — имя
|
|
23
|
+
- `name: string` — имя cookie для управления
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
import { Cookie } from '@dxtmisha/functional'
|
|
25
|
+
## Методы
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
39
|
+
#### `set`
|
|
33
40
|
|
|
34
|
-
|
|
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
|
-
**Возвращает:** `
|
|
47
|
+
**Возвращает:** `void`
|
|
40
48
|
|
|
41
|
-
|
|
42
|
-
// Прочитает 'theme', ИЛИ установит и вернет 'dark', если его не существует
|
|
43
|
-
const currentTheme = themeCookie.get('dark')
|
|
44
|
-
```
|
|
49
|
+
#### `remove`
|
|
45
50
|
|
|
46
|
-
|
|
51
|
+
Удаляет cookie, устанавливая пустое значение и Max-Age в `-1`, что заставляет браузер немедленно удалить запись.
|
|
47
52
|
|
|
48
|
-
|
|
53
|
+
**Возвращает:** `void`
|
|
49
54
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
- `
|
|
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
|
-
|
|
55
|
-
const userPrefs = new Cookie('preferences')
|
|
67
|
+
Объект конфигурации для параметров cookie:
|
|
56
68
|
|
|
57
|
-
|
|
58
|
-
|
|
69
|
+
- `age?: number` — время жизни в секундах (атрибут Max-Age). По умолчанию: 7 дней (604800 сек)
|
|
70
|
+
- `sameSite?: 'strict' | 'lax'` — политика SameSite. По умолчанию: `'strict'`
|
|
71
|
+
- `arguments?: string[]` — дополнительные директивы для строки cookie
|
|
59
72
|
|
|
60
|
-
|
|
61
|
-
|
|
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
|
-
###
|
|
99
|
+
### Использование getInstance
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
import { Cookie } from '@dxtmisha/functional'
|
|
103
|
+
|
|
104
|
+
// Получение или создание экземпляра
|
|
105
|
+
const cookie = Cookie.getInstance<string>('user')
|
|
68
106
|
|
|
69
|
-
|
|
107
|
+
// Все вызовы getInstance с одним именем возвращают один и тот же экземпляр
|
|
108
|
+
const sameCookie = Cookie.getInstance<string>('user')
|
|
70
109
|
|
|
71
|
-
|
|
72
|
-
userPrefs.remove()
|
|
110
|
+
console.log(cookie === sameCookie) // true
|
|
73
111
|
```
|
|
74
112
|
|
|
75
|
-
|
|
113
|
+
### Интеграция с CookieBlock
|
|
76
114
|
|
|
77
|
-
|
|
115
|
+
```typescript
|
|
116
|
+
import { Cookie, CookieBlock } from '@dxtmisha/functional'
|
|
78
117
|
|
|
79
|
-
|
|
118
|
+
// Блокировка всех операций записи
|
|
119
|
+
CookieBlock.set(true)
|
|
80
120
|
|
|
81
|
-
|
|
121
|
+
const cookie = new Cookie('blocked')
|
|
82
122
|
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
##
|
|
18
|
+
## Constructor
|
|
17
19
|
|
|
18
|
-
|
|
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 có sẽ được trả về.
|
|
19
21
|
|
|
20
22
|
**Tham số:**
|
|
21
|
-
- `name: string` — tên
|
|
23
|
+
- `name: string` — tên cookie để quản lý
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
import { Cookie } from '@dxtmisha/functional'
|
|
25
|
+
## Phương thức
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
37
|
+
**Trả về:** `T | string | undefined` — biến lấy từ cookie hoặc dữ liệu phụ trợ
|
|
31
38
|
|
|
32
|
-
|
|
39
|
+
#### `set`
|
|
33
40
|
|
|
34
|
-
|
|
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 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`. 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)` —
|
|
44
|
+
- `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
|
|
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ề:** `
|
|
47
|
+
**Trả về:** `void`
|
|
40
48
|
|
|
41
|
-
|
|
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
|
-
|
|
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
|
-
|
|
53
|
+
**Trả về:** `void`
|
|
49
54
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
- `
|
|
55
|
+
### Phương thức tĩnh
|
|
56
|
+
|
|
57
|
+
- `getInstance<T>(name: string): Cookie<T>` — Trả về phiên bản hiện có 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
|
-
|
|
55
|
-
|
|
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
|
-
|
|
87
|
+
themeCookie.set('light')
|
|
59
88
|
|
|
60
89
|
// Trỏ cấu hình tuỳ chỉnh đa hệ
|
|
61
|
-
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
72
|
-
userPrefs.remove()
|
|
110
|
+
console.log(cookie === sameCookie) // true
|
|
73
111
|
```
|
|
74
112
|
|
|
75
|
-
|
|
113
|
+
### Tích hợp với CookieBlock
|
|
76
114
|
|
|
77
|
-
|
|
115
|
+
```typescript
|
|
116
|
+
import { Cookie, CookieBlock } from '@dxtmisha/functional'
|
|
78
117
|
|
|
79
|
-
|
|
118
|
+
// Chặn tất cả hoạt động ghi
|
|
119
|
+
CookieBlock.set(true)
|
|
80
120
|
|
|
81
|
-
|
|
121
|
+
const cookie = new Cookie('blocked')
|
|
82
122
|
|
|
83
|
-
|
|
84
|
-
|
|
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.
|
|
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
|
|
13
|
-
- **
|
|
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
|
-
|
|
19
|
+
### Action
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
#### `set`
|
|
19
22
|
|
|
20
|
-
|
|
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
|
-
|
|
25
|
+
**Parameters:**
|
|
26
|
+
- `value: boolean` — `true` to block cookie writes, `false` to allow them
|
|
23
27
|
|
|
24
|
-
**Returns:** `
|
|
28
|
+
**Returns:** `void`
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
if (CookieBlock.get()) {
|
|
28
|
-
console.log('Cookie writes are currently blocked by user settings.')
|
|
29
|
-
}
|
|
30
|
-
```
|
|
30
|
+
### Check
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
- `get(): boolean` — Returns the current blocking status. `true` if cookie writing is blocked
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
## Examples
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
- `value: boolean` — `true` to block cookie writes, `false` to allow them.
|
|
36
|
+
### Basic Usage
|
|
38
37
|
|
|
39
|
-
```
|
|
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.
|
|
54
|
-
2.
|
|
55
|
-
3.
|
|
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.
|