@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,54 +4,75 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
4
4
|
|
|
5
5
|
# Класс CookieBlock
|
|
6
6
|
|
|
7
|
-
Статический служебный класс,
|
|
7
|
+
Статический служебный класс, служащий глобальным "аварийным выключателем" для изменений куки в DOM. Предоставляет простое логическое состояние, которое другие классы, в частности `Cookie`, проверяют перед попыткой записи в `document.cookie`.
|
|
8
|
+
|
|
9
|
+
Включает тесную интеграцию с `ServerStorage` для изоляции состояния между запросами в SSR окружении.
|
|
8
10
|
|
|
9
11
|
## Ключевые особенности
|
|
10
12
|
|
|
11
|
-
- **Глобальная истина** — единая точка конфигурации для остановки операций с куки в масштабах всего
|
|
12
|
-
- **Соответствие конфиденциальности** — крайне полезно для реализации баннеров "Согласие на использование файлов cookie"
|
|
13
|
-
-
|
|
13
|
+
- **Глобальная истина** — единая точка конфигурации для остановки операций с куки в масштабах всего приложения
|
|
14
|
+
- **Соответствие конфиденциальности** — крайне полезно для реализации баннеров "Согласие на использование файлов cookie"
|
|
15
|
+
- **SSR-совместимость** — использует `ServerStorage` для надежного поддержания заблокированного состояния в изолированном контексте каждого запроса
|
|
14
16
|
|
|
17
|
+
## Статические методы
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
### Действие
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
#### `set`
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
Включает или отключает возможности записи куки в DOM. При значении `true` все операции записи будут сохранять данные только в памяти, не затрагивая `document.cookie`.
|
|
21
24
|
|
|
22
|
-
|
|
25
|
+
**Параметры:**
|
|
26
|
+
- `value: boolean` — `true` для блокировки записи куки, `false` для разрешения
|
|
23
27
|
|
|
24
|
-
**Возвращает:** `
|
|
28
|
+
**Возвращает:** `void`
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
if (CookieBlock.get()) {
|
|
28
|
-
console.log('Запись куки в настоящее время заблокирована настройками пользователя.')
|
|
29
|
-
}
|
|
30
|
-
```
|
|
30
|
+
### Проверка
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
- `get(): boolean` — Возвращает текущий статус блокировки. `true`, если запись куки заблокирована
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
## Примеры
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
- `value: boolean` — `true` для блокировки записи куки, `false` для разрешения.
|
|
36
|
+
### Базовое использование
|
|
38
37
|
|
|
39
|
-
```
|
|
38
|
+
```typescript
|
|
40
39
|
import { CookieBlock } from '@dxtmisha/functional'
|
|
41
40
|
|
|
42
|
-
//
|
|
41
|
+
// Блокировать все будущие записи куки в DOM
|
|
43
42
|
CookieBlock.set(true)
|
|
44
43
|
|
|
45
|
-
|
|
44
|
+
if (CookieBlock.get()) {
|
|
45
|
+
console.log('Запись куки в настоящее время заблокирована')
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Разрешить записи куки в DOM
|
|
46
49
|
CookieBlock.set(false)
|
|
47
50
|
```
|
|
48
51
|
|
|
52
|
+
### Реализация баннера согласия
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
import { CookieBlock, Cookie } from '@dxtmisha/functional'
|
|
56
|
+
|
|
57
|
+
// При загрузке приложения блокируем cookie
|
|
58
|
+
CookieBlock.set(true)
|
|
59
|
+
|
|
60
|
+
// После принятия пользователем
|
|
61
|
+
function onCookieConsentAccepted() {
|
|
62
|
+
CookieBlock.set(false)
|
|
63
|
+
|
|
64
|
+
// Теперь можно устанавливать cookie
|
|
65
|
+
const theme = new Cookie('theme')
|
|
66
|
+
theme.set('dark')
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
49
70
|
## Как это взаимодействует с `Cookie`
|
|
50
71
|
|
|
51
72
|
Базовый класс `Cookie` строго следит за этой блокировкой. Если `CookieBlock.get()` возвращает `true`:
|
|
52
73
|
|
|
53
|
-
1.
|
|
54
|
-
2.
|
|
55
|
-
3.
|
|
74
|
+
1. Логика приложения может технически вызывать `cookieInstance.set('value')`
|
|
75
|
+
2. Экземпляр `Cookie` обновит свое *внутреннее хранилище в памяти* новым значением
|
|
76
|
+
3. Экземпляр `Cookie` **молча откажется** от фактической записи в DOM `document.cookie = ...`
|
|
56
77
|
|
|
57
|
-
Это гарантирует, что
|
|
78
|
+
Это гарантирует, что приложение не сломается от неопределенных чтений в памяти, при этом строго соблюдая настройки браузера по сохранению на диск.
|
|
@@ -6,52 +6,73 @@ import {Meta} from '@storybook/addon-docs/blocks'
|
|
|
6
6
|
|
|
7
7
|
Lớp tiện ích static dùng để định nghĩa quy luật truy cập ("kill switch" hoặc cầu dao tổng) nhắm thẳng vào quá trình hệ thống có cho phép chỉnh/sửa nội dung DOM cookie trên website hay không. Bằng cách thiết lập chuẩn khoá chặn (boolean logic), các node class lớn hơn (ví dụ Class gốc `Cookie`) sẽ liên tục móc và lắng nghe lệnh này trước khi tiến hành bước in/thực thi ghi data vào `document.cookie`.
|
|
8
8
|
|
|
9
|
+
Bao gồm tích hợp chặt chẽ với `ServerStorage` để cách ly trạng thái giữa các yêu cầu trong SSR.
|
|
10
|
+
|
|
9
11
|
## Các tính năng chính
|
|
10
12
|
|
|
11
|
-
- **Chấp Nhận Quy Trình Định Mức Chung (Global Truth)** — cổng tuỳ chỉnh/kiểm soát chung đối với quá trình lưu tạo/in cookie dọc toàn bộ mã lệnh ứng dụng
|
|
12
|
-
- **Chuẩn Cấu Hình Quyền Riêng Tư Đặc thù (Privacy Compliance)** — một mẫu logic tuyệt vời dùng lập trình những phần banner xác nhận "Cookie Consent" (Xin quyền nạp Tracking). Người code chỉ việc nối logic nút bật class thành giá trị `true` đến chừng nào user chốt chấp nhận quy tắc lấy thông tin ở nút 'Đồng Ý'
|
|
13
|
-
- **
|
|
13
|
+
- **Chấp Nhận Quy Trình Định Mức Chung (Global Truth)** — cổng tuỳ chỉnh/kiểm soát chung đối với quá trình lưu tạo/in cookie dọc toàn bộ mã lệnh ứng dụng
|
|
14
|
+
- **Chuẩn Cấu Hình Quyền Riêng Tư Đặc thù (Privacy Compliance)** — một mẫu logic tuyệt vời dùng lập trình những phần banner xác nhận "Cookie Consent" (Xin quyền nạp Tracking). Người code chỉ việc nối logic nút bật class thành giá trị `true` đến chừng nào user chốt chấp nhận quy tắc lấy thông tin ở nút 'Đồng Ý'
|
|
15
|
+
- **SSR-совместимость** — sử dụng `ServerStorage` để duy trì trạng thái chặn đáng tin cậy trong bối cảnh yêu cầu cách ly
|
|
14
16
|
|
|
17
|
+
## Phương thức tĩnh
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
### Hành động
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
#### `set`
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
Bật hoặc tắt khả năng ghi cookie. Khi đặt thành `true`, tất cả hoạt động ghi sẽ chỉ lưu dữ liệu trong bộ nhớ, không chạm đến `document.cookie`.
|
|
21
24
|
|
|
22
|
-
|
|
25
|
+
**Tham số:**
|
|
26
|
+
- `value: boolean` — `true` để chặn ghi cookie, `false` để cho phép
|
|
23
27
|
|
|
24
|
-
**Trả về:** `
|
|
28
|
+
**Trả về:** `void`
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
if (CookieBlock.get()) {
|
|
28
|
-
console.log('Quá trình nạp DOM/ghi chép Cookie đang khoá do cài đặt phía user chưa cho quyền truy cập.')
|
|
29
|
-
}
|
|
30
|
-
```
|
|
30
|
+
### Kiểm tra
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
- `get(): boolean` — Trả về trạng thái chặn hiện tại. `true` nếu ghi cookie bị chặn
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
## Ví dụ
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
- `value: boolean` — `true` đồng nghĩa chặn toàn bộ biến muốn viết cookie ra ngoài trỏ lên web, `false` hệ thống lại bật tắt mượt mà bình thường.
|
|
36
|
+
### Sử dụng cơ bản
|
|
38
37
|
|
|
39
|
-
```
|
|
38
|
+
```typescript
|
|
40
39
|
import { CookieBlock } from '@dxtmisha/functional'
|
|
41
40
|
|
|
42
41
|
// Lệnh chặn khẩn cấp toàn bộ dữ liệu ghi DOM cookie
|
|
43
42
|
CookieBlock.set(true)
|
|
44
43
|
|
|
44
|
+
if (CookieBlock.get()) {
|
|
45
|
+
console.log('Quá trình nạp DOM/ghi chép Cookie đang khoá do cài đặt phía user chưa cho quyền truy cập.')
|
|
46
|
+
}
|
|
47
|
+
|
|
45
48
|
// Dỡ bỏ cảnh bảo / Cấp quyền DOM in cookie (Cấu hình chuẩn của object mới)
|
|
46
49
|
CookieBlock.set(false)
|
|
47
50
|
```
|
|
48
51
|
|
|
49
|
-
|
|
52
|
+
### Triển khai banner đồng ý
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
import { CookieBlock, Cookie } from '@dxtmisha/functional'
|
|
56
|
+
|
|
57
|
+
// Chặn cookie khi tải ứng dụng
|
|
58
|
+
CookieBlock.set(true)
|
|
59
|
+
|
|
60
|
+
// Sau khi người dùng đồng ý
|
|
61
|
+
function onCookieConsentAccepted() {
|
|
62
|
+
CookieBlock.set(false)
|
|
63
|
+
|
|
64
|
+
// Bây giờ có thể đặt cookie
|
|
65
|
+
const theme = new Cookie('theme')
|
|
66
|
+
theme.set('dark')
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Phương thức logic khi mắc nối với lớp `Cookie`
|
|
50
71
|
|
|
51
72
|
Nhân/Bộ cấu trúc tổng của class `Cookie` được code giám sát nghiêm ngặt mọi lệnh do luồng chặn phát đi. Lúc biến nhị phân `CookieBlock.get()` bị chốt ở mode `true`:
|
|
52
73
|
|
|
53
|
-
1.
|
|
54
|
-
2.
|
|
55
|
-
3.
|
|
74
|
+
1. Ở nội bộ luồng mã, quá trình chạy vẫn ngầm hiểu là hệ thống gọi app bằng node lưu biến `cookieInstance.set('value')`
|
|
75
|
+
2. Tiến trình instance trực thuộc `Cookie` kích hoạt việc in giá trị cập nhật/ghi đè thay thế nằm vào hàng đợi của *cơ sở memory ảo* (internal memory)
|
|
76
|
+
3. Tuyệt nhiên tại chính node instance của `Cookie` **hệ thống tự phát sinh quyền bác bỏ im lặng (silently refuse)** đối với hàm ghi biến tĩnh `document.cookie = ...` tại nhánh DOM ảo lẫn DOM thật
|
|
56
77
|
|
|
57
78
|
Luồng giao thức 3 buớc phía trên đáp ứng hoàn hảo hai tiêu chí tối thượng trong quy chuẩn kỹ thuật: Giúp DOM website không bị bóp băng thông khi chạy lỗi code lấy lệnh từ hệ memory chưa cấp dữ liệu (ngăn văng bug), cũng như giữ thiết lập tôn trọng chính sách truy vấn riêng tư bảo mật đĩa cứng phía Browser theo chuẩn Âu/Mỹ.
|
package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.en.mdx
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/en/functional-basic/Classes/CookieBlockInstance - Cookie Access Status Instance'/>
|
|
4
|
+
|
|
5
|
+
# CookieBlockInstance Class
|
|
6
|
+
|
|
7
|
+
The `CookieBlockInstance` class is responsible for managing the cookie access status at the instance level. It provides a localized state for blocking or allowing cookie operations, which is essential for request isolation in Server-Side Rendering (SSR) or when multiple independent contexts are required.
|
|
8
|
+
|
|
9
|
+
Includes tight integration with `DataStorage` for reliable state persistence.
|
|
10
|
+
|
|
11
|
+
## Key Features
|
|
12
|
+
|
|
13
|
+
- **Instance-Based** — allows creating separate instances with their own block status
|
|
14
|
+
- **DataStorage Integration** — automatically persists the block status using the `DataStorage` class
|
|
15
|
+
- **SSR Compatible** — designed to work seamlessly in server-side environments by leveraging the singleton-per-request pattern when wrapped by `CookieBlock`
|
|
16
|
+
|
|
17
|
+
## Methods
|
|
18
|
+
|
|
19
|
+
### Action
|
|
20
|
+
|
|
21
|
+
#### `set`
|
|
22
|
+
|
|
23
|
+
Updates the cookie access status. When set to `true`, blocks all cookie write operations within this instance's context.
|
|
24
|
+
|
|
25
|
+
**Parameters:**
|
|
26
|
+
- `value: boolean` — the new status to set
|
|
27
|
+
|
|
28
|
+
### Check
|
|
29
|
+
|
|
30
|
+
- `get(): boolean` — Returns the current cookie access status. `true` if cookies are blocked, `false` otherwise
|
|
31
|
+
|
|
32
|
+
## Examples
|
|
33
|
+
|
|
34
|
+
### Basic Usage
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { CookieBlockInstance } from '@dxtmisha/functional-basic'
|
|
38
|
+
|
|
39
|
+
const cookieBlock = new CookieBlockInstance()
|
|
40
|
+
|
|
41
|
+
// Get the current status
|
|
42
|
+
console.log(cookieBlock.get()) // false (default)
|
|
43
|
+
|
|
44
|
+
// Set status to blocked
|
|
45
|
+
cookieBlock.set(true)
|
|
46
|
+
|
|
47
|
+
console.log(cookieBlock.get()) // true
|
|
48
|
+
|
|
49
|
+
// Unblock
|
|
50
|
+
cookieBlock.set(false)
|
|
51
|
+
|
|
52
|
+
console.log(cookieBlock.get()) // false
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Using via CookieBlock
|
|
56
|
+
|
|
57
|
+
While `CookieBlockInstance` can be used directly, it is typically accessed through the static `CookieBlock` wrapper:
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
import { CookieBlock } from '@dxtmisha/functional-basic'
|
|
61
|
+
|
|
62
|
+
// CookieBlock automatically creates an isolated instance for each request
|
|
63
|
+
CookieBlock.set(true)
|
|
64
|
+
|
|
65
|
+
// Status is accessible through static methods
|
|
66
|
+
if (CookieBlock.get()) {
|
|
67
|
+
console.log('Cookies are blocked in the current context')
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Independent Contexts
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import { CookieBlockInstance } from '@dxtmisha/functional-basic'
|
|
75
|
+
|
|
76
|
+
// Create independent instances
|
|
77
|
+
const block1 = new CookieBlockInstance()
|
|
78
|
+
const block2 = new CookieBlockInstance()
|
|
79
|
+
|
|
80
|
+
block1.set(true)
|
|
81
|
+
|
|
82
|
+
console.log(block1.get()) // true
|
|
83
|
+
console.log(block2.get()) // false (independent instance)
|
|
84
|
+
```
|
package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.ru.mdx
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/ru/functional-basic/Classes/CookieBlockInstance - Экземпляр статуса доступа к куки'/>
|
|
4
|
+
|
|
5
|
+
# Класс CookieBlockInstance
|
|
6
|
+
|
|
7
|
+
Класс `CookieBlockInstance` отвечает за управление статусом доступа к куки на уровне экземпляра. Предоставляет локализованное состояние для блокировки или разрешения операций с куки, что необходимо для изоляции запросов в Server-Side Rendering (SSR) или когда требуются несколько независимых контекстов.
|
|
8
|
+
|
|
9
|
+
Включает тесную интеграцию с `DataStorage` для надежного сохранения статуса.
|
|
10
|
+
|
|
11
|
+
## Ключевые особенности
|
|
12
|
+
|
|
13
|
+
- **На основе экземпляров** — позволяет создавать отдельные экземпляры с их собственным статусом блокировки
|
|
14
|
+
- **Интеграция с DataStorage** — автоматически сохраняет статус блокировки, используя класс `DataStorage`
|
|
15
|
+
- **Совместимость с SSR** — разработан для бесшовной работы в серверных средах, используя паттерн "один экземпляр на запрос" при использовании через обертку `CookieBlock`
|
|
16
|
+
|
|
17
|
+
## Методы
|
|
18
|
+
|
|
19
|
+
### Действие
|
|
20
|
+
|
|
21
|
+
#### `set`
|
|
22
|
+
|
|
23
|
+
Обновляет статус доступа к куки. При значении `true` блокирует все операции записи с куки в контексте этого экземпляра.
|
|
24
|
+
|
|
25
|
+
**Параметры:**
|
|
26
|
+
- `value: boolean` — новый статус для установки
|
|
27
|
+
|
|
28
|
+
### Проверка
|
|
29
|
+
|
|
30
|
+
- `get(): boolean` — Возвращает текущий статус доступа к куки. `true`, если куки заблокированы, иначе `false`
|
|
31
|
+
|
|
32
|
+
## Примеры
|
|
33
|
+
|
|
34
|
+
### Базовое использование
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { CookieBlockInstance } from '@dxtmisha/functional-basic'
|
|
38
|
+
|
|
39
|
+
const cookieBlock = new CookieBlockInstance()
|
|
40
|
+
|
|
41
|
+
// Получить текущий статус
|
|
42
|
+
console.log(cookieBlock.get()) // false (по умолчанию)
|
|
43
|
+
|
|
44
|
+
// Заблокировать куки
|
|
45
|
+
cookieBlock.set(true)
|
|
46
|
+
|
|
47
|
+
console.log(cookieBlock.get()) // true
|
|
48
|
+
|
|
49
|
+
// Разблокировать куки
|
|
50
|
+
cookieBlock.set(false)
|
|
51
|
+
|
|
52
|
+
console.log(cookieBlock.get()) // false
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Использование через CookieBlock
|
|
56
|
+
|
|
57
|
+
Хотя `CookieBlockInstance` можно использовать напрямую, обычно к нему обращаются через статическую обертку `CookieBlock`:
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
import { CookieBlock } from '@dxtmisha/functional-basic'
|
|
61
|
+
|
|
62
|
+
// CookieBlock автоматически создает изолированный экземпляр для каждого запроса
|
|
63
|
+
CookieBlock.set(true)
|
|
64
|
+
|
|
65
|
+
// Статус доступен через статические методы
|
|
66
|
+
if (CookieBlock.get()) {
|
|
67
|
+
console.log('Куки заблокированы в текущем контексте')
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Независимые контексты
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import { CookieBlockInstance } from '@dxtmisha/functional-basic'
|
|
75
|
+
|
|
76
|
+
// Создание независимых экземпляров
|
|
77
|
+
const block1 = new CookieBlockInstance()
|
|
78
|
+
const block2 = new CookieBlockInstance()
|
|
79
|
+
|
|
80
|
+
block1.set(true)
|
|
81
|
+
|
|
82
|
+
console.log(block1.get()) // true
|
|
83
|
+
console.log(block2.get()) // false (независимый экземпляр)
|
|
84
|
+
```
|
package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.vi.mdx
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/vi/functional-basic/Classes/CookieBlockInstance - Phiên bản trạng thái truy cập Cookie'/>
|
|
4
|
+
|
|
5
|
+
# Lớp CookieBlockInstance
|
|
6
|
+
|
|
7
|
+
Lớp `CookieBlockInstance` chịu trách nhiệm quản lý trạng thái truy cập cookie ở cấp độ phiên bản (instance). Nó cung cấp một trạng thái cục bộ để chặn hoặc cho phép các thao tác cookie, điều này rất quan trọng để cách ly các yêu cầu trong Server-Side Rendering (SSR) hoặc khi cần nhiều ngữ cảnh độc lập.
|
|
8
|
+
|
|
9
|
+
Bao gồm tích hợp chặt chẽ với `DataStorage` để lưu trữ trạng thái chặn đáng tin cậy.
|
|
10
|
+
|
|
11
|
+
## Các tính năng chính
|
|
12
|
+
|
|
13
|
+
- **Dựa trên phiên bản (Instance-Based)** — cho phép tạo các phiên bản riêng biệt với trạng thái chặn của riêng chúng
|
|
14
|
+
- **Tích hợp DataStorage** — tự động lưu trữ trạng thái chặn bằng cách sử dụng lớp `DataStorage`
|
|
15
|
+
- **Tương thích với SSR** — được thiết kế để hoạt động trơn tru trong môi trường phía máy chủ bằng cách tận dụng mô hình singleton-mỗi-yêu-cầu khi được bao bọc bởi `CookieBlock`
|
|
16
|
+
|
|
17
|
+
## Phương thức
|
|
18
|
+
|
|
19
|
+
### Hành động
|
|
20
|
+
|
|
21
|
+
#### `set`
|
|
22
|
+
|
|
23
|
+
Cập nhật trạng thái truy cập cookie. Khi đặt thành `true`, chặn tất cả hoạt động ghi cookie trong ngữ cảnh của phiên bản này.
|
|
24
|
+
|
|
25
|
+
**Tham số:**
|
|
26
|
+
- `value: boolean` — trạng thái mới cần thiết lập
|
|
27
|
+
|
|
28
|
+
### Kiểm tra
|
|
29
|
+
|
|
30
|
+
- `get(): boolean` — Trả về trạng thái truy cập cookie hiện tại. `true` nếu cookie bị chặn, `false` nếu ngược lại
|
|
31
|
+
|
|
32
|
+
## Cách sử dụng cơ bản
|
|
33
|
+
|
|
34
|
+
Mặc dù `CookieBlockInstance` có thể được sử dụng trực tiếp, nhưng thông thường nó được truy cập thông qua lớp bọc tĩnh `CookieBlock`. Tuy nhiên, đối với logic chuyên biệt, bạn có thể khởi tạo nó theo cách thủ công:
|
|
35
|
+
|
|
36
|
+
```javascript
|
|
37
|
+
import { CookieBlockInstance } from '@dxtmisha/functional-basic'
|
|
38
|
+
|
|
39
|
+
const cookieBlock = new CookieBlockInstance()
|
|
40
|
+
|
|
41
|
+
// Lấy trạng thái hiện tại
|
|
42
|
+
console.log(cookieBlock.get()) // false (mặc định)
|
|
43
|
+
|
|
44
|
+
// Đặt trạng thái thành bị chặn
|
|
45
|
+
cookieBlock.set(true)
|
|
46
|
+
|
|
47
|
+
console.log(cookieBlock.get()) // true
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Ví dụ
|
|
51
|
+
|
|
52
|
+
### Sử dụng trực tiếp
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
import { CookieBlockInstance } from '@dxtmisha/functional-basic'
|
|
56
|
+
|
|
57
|
+
const cookieBlock = new CookieBlockInstance()
|
|
58
|
+
|
|
59
|
+
// Lấy trạng thái hiện tại
|
|
60
|
+
console.log(cookieBlock.get()) // false (mặc định)
|
|
61
|
+
|
|
62
|
+
// Đặt trạng thái thành bị chặn
|
|
63
|
+
cookieBlock.set(true)
|
|
64
|
+
|
|
65
|
+
console.log(cookieBlock.get()) // true
|
|
66
|
+
|
|
67
|
+
// Mở chặn
|
|
68
|
+
cookieBlock.set(false)
|
|
69
|
+
|
|
70
|
+
console.log(cookieBlock.get()) // false
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Sử dụng qua CookieBlock
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
import { CookieBlock } from '@dxtmisha/functional-basic'
|
|
77
|
+
|
|
78
|
+
// CookieBlock tự động tạo phiên bản cách ly cho mỗi yêu cầu
|
|
79
|
+
CookieBlock.set(true)
|
|
80
|
+
|
|
81
|
+
// Trạng thái có thể truy cập qua các phương thức tĩnh
|
|
82
|
+
if (CookieBlock.get()) {
|
|
83
|
+
console.log('Cookies bị chặn trong ngữ cảnh hiện tại')
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Ngữ cảnh độc lập
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
import { CookieBlockInstance } from '@dxtmisha/functional-basic'
|
|
91
|
+
|
|
92
|
+
// Tạo các phiên bản độc lập
|
|
93
|
+
const block1 = new CookieBlockInstance()
|
|
94
|
+
const block2 = new CookieBlockInstance()
|
|
95
|
+
|
|
96
|
+
block1.set(true)
|
|
97
|
+
|
|
98
|
+
console.log(block1.get()) // true
|
|
99
|
+
console.log(block2.get()) // false (phiên bản độc lập)
|
|
100
|
+
```
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import {Meta} from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title='@dxtmisha/en/functional-basic/Classes/CookieStorage - Cookie Storage'/>
|
|
4
|
+
|
|
5
|
+
# CookieStorage Class
|
|
6
|
+
|
|
7
|
+
A class for managing cookie storage with support for custom listeners. Provides a low-level interface for working with cookies in different environments (DOM, SSR) with automatic type parsing and secure data handling.
|
|
8
|
+
|
|
9
|
+
Includes tight integration with `CookieBlock` for access control and supports URL-encoded value decoding.
|
|
10
|
+
|
|
11
|
+
## Key Features
|
|
12
|
+
|
|
13
|
+
- **Flexible Storage** — supports in-memory storage and external storage mechanisms through listeners
|
|
14
|
+
- **Automatic Parsing** — intelligently converts string values to appropriate data types
|
|
15
|
+
- **Block Integration** — respects global write blocking via `CookieBlock`
|
|
16
|
+
- **Environment Awareness** — automatically detects DOM environment and adapts behavior
|
|
17
|
+
- **URL Decoding** — automatically decodes names and values when reading from DOM
|
|
18
|
+
|
|
19
|
+
## Static Methods
|
|
20
|
+
|
|
21
|
+
### Action
|
|
22
|
+
|
|
23
|
+
#### `get`
|
|
24
|
+
|
|
25
|
+
Retrieves a cookie value by name with automatic type conversion. If the value doesn't exist and a default is provided, it will be set and stored.
|
|
26
|
+
|
|
27
|
+
**Parameters:**
|
|
28
|
+
- `name: string` — the cookie name
|
|
29
|
+
- `defaultValue?: T | (() => T)` — default value or function returning the value
|
|
30
|
+
|
|
31
|
+
**Returns:** `T | undefined` — the converted cookie value or default value
|
|
32
|
+
|
|
33
|
+
#### `set`
|
|
34
|
+
|
|
35
|
+
Stores a cookie value with specified options and automatically updates both memory and DOM. If blocking is active via `CookieBlock`, the value is stored in memory only.
|
|
36
|
+
|
|
37
|
+
**Parameters:**
|
|
38
|
+
- `name: string` — the cookie name
|
|
39
|
+
- `value: T | (() => T)` — the value or a function returning the value
|
|
40
|
+
- `options?: CookieOptions` — additional cookie options
|
|
41
|
+
|
|
42
|
+
**Returns:** `T` — the stored value
|
|
43
|
+
|
|
44
|
+
#### `remove`
|
|
45
|
+
|
|
46
|
+
Removes a cookie by setting an empty value and negative expiration. Equivalent to calling `set(name, '', { age: -1 })`.
|
|
47
|
+
|
|
48
|
+
**Parameters:**
|
|
49
|
+
- `name: string` — the cookie name
|
|
50
|
+
|
|
51
|
+
### Configuration
|
|
52
|
+
|
|
53
|
+
- `init(getListener, setListener)` — Initializes the storage with custom listeners for reading and writing data
|
|
54
|
+
- `reset()` — Resets the storage by clearing all in-memory items and removing listeners
|
|
55
|
+
|
|
56
|
+
### Auxiliary
|
|
57
|
+
|
|
58
|
+
- `update()` — Updates in-memory data by parsing values from `document.cookie`
|
|
59
|
+
|
|
60
|
+
## Types
|
|
61
|
+
|
|
62
|
+
### `CookieOptions`
|
|
63
|
+
|
|
64
|
+
Configuration object for cookie parameters:
|
|
65
|
+
|
|
66
|
+
- `age?: number` — lifetime in seconds (Max-Age attribute)
|
|
67
|
+
- `sameSite?: 'strict' | 'lax'` — SameSite policy
|
|
68
|
+
- `arguments?: string[]` — additional directives for the cookie string
|
|
69
|
+
|
|
70
|
+
## Built-in Type Conversion
|
|
71
|
+
|
|
72
|
+
`CookieStorage` automatically converts string values when reading:
|
|
73
|
+
|
|
74
|
+
- `'undefined'` → `undefined`
|
|
75
|
+
- `'null'` → `null`
|
|
76
|
+
- `'true'` → `true`
|
|
77
|
+
- `'false'` → `false`
|
|
78
|
+
- `'123'` → `123` (number)
|
|
79
|
+
- `'{"key":"value"}'` → `{key: 'value'}` (JSON object)
|
|
80
|
+
|
|
81
|
+
## Examples
|
|
82
|
+
|
|
83
|
+
### Basic Usage
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import { CookieStorage } from '@dxtmisha/functional-basic'
|
|
87
|
+
|
|
88
|
+
// Get with default value
|
|
89
|
+
const theme = CookieStorage.get<string>('theme', 'dark')
|
|
90
|
+
|
|
91
|
+
// Store value
|
|
92
|
+
CookieStorage.set('user', 'john', {
|
|
93
|
+
age: 3600,
|
|
94
|
+
sameSite: 'lax'
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
// Remove
|
|
98
|
+
CookieStorage.remove('user')
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Initialize with External Storage
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
import { CookieStorage } from '@dxtmisha/functional-basic'
|
|
105
|
+
|
|
106
|
+
CookieStorage.init(
|
|
107
|
+
(key) => myStorage.get(key),
|
|
108
|
+
(key, value, options) => myStorage.set(key, value, options)
|
|
109
|
+
)
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Update and Reset
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
import { CookieStorage } from '@dxtmisha/functional-basic'
|
|
116
|
+
|
|
117
|
+
// Update in-memory data from document.cookie
|
|
118
|
+
// Useful when cookies were set externally
|
|
119
|
+
CookieStorage.update()
|
|
120
|
+
|
|
121
|
+
// Reset storage (clear listeners and in-memory data)
|
|
122
|
+
// Useful for testing or cleanup
|
|
123
|
+
CookieStorage.reset()
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Complete Workflow
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
import { CookieStorage } from '@dxtmisha/functional-basic'
|
|
130
|
+
|
|
131
|
+
// Initialize with custom storage
|
|
132
|
+
CookieStorage.init(
|
|
133
|
+
(key) => redis.get(key),
|
|
134
|
+
(key, value, options) => redis.set(key, value, options)
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
// Set value with options
|
|
138
|
+
CookieStorage.set('user', 'john', {
|
|
139
|
+
age: 3600, // 1 hour
|
|
140
|
+
sameSite: 'lax', // SameSite policy
|
|
141
|
+
arguments: ['Secure', 'Path=/'] // Additional directives
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
// Get with type conversion
|
|
145
|
+
const user = CookieStorage.get<string>('user')
|
|
146
|
+
|
|
147
|
+
// Update from external source
|
|
148
|
+
CookieStorage.update()
|
|
149
|
+
|
|
150
|
+
// Clean up
|
|
151
|
+
CookieStorage.remove('user')
|
|
152
|
+
CookieStorage.reset()
|
|
153
|
+
```
|