@dxtmisha/wiki 0.39.7 → 0.39.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{defineProperty-DblGXmzD.js → defineProperty-Bjg6wMoX.js} +4 -4
- package/dist/library.js +1 -1
- package/dist/media.js +12 -0
- package/dist/storybook.js +1 -1
- package/package.json +1 -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
|
@@ -1,33 +1,51 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/ru/functional-basic/Functions/anyToString - Преобразование значения в строку'/>
|
|
4
4
|
|
|
5
5
|
# `anyToString`
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Это полезно при выводе данных в интерфейс, когда заранее неизвестен тип переменной (объект, массив, boolean или null).
|
|
7
|
+
Утилита для безопасного приведения любых данных к строковому типу.
|
|
10
8
|
|
|
11
9
|
**Параметры:**
|
|
12
|
-
- `value: V` —
|
|
13
|
-
- `isArrayString: boolean
|
|
10
|
+
- `value: V` — Значение для преобразования.
|
|
11
|
+
- `isArrayString: boolean = true` — Если `true`, массивы примитивов объединяются через запятую.
|
|
12
|
+
- `trim: boolean = true` — Если `true`, обрезает лишние пробелы (только для строк).
|
|
13
|
+
|
|
14
|
+
**Правила преобразования:**
|
|
15
|
+
- **Строки**: Возвращаются как есть (с `trim`, если включено).
|
|
16
|
+
- **Массивы**: Если `isArrayString: true` и в массиве нет объектов, элементы объединяются через запятую. В остальных случаях — JSON.
|
|
17
|
+
- **Объекты**: Преобразуются в JSON. При ошибке (например, циклической ссылке) возвращается стандартный `toString()`.
|
|
18
|
+
- **Boolean**: `true` преобразуется в `'1'`, `false` — в `'0'`.
|
|
19
|
+
- **Прочие типы**: `null` и `undefined` дают пустую строку. Для остальных вызывается `toString()`.
|
|
14
20
|
|
|
15
21
|
**Возвращает:**
|
|
16
|
-
`string` — Строковое представление
|
|
22
|
+
`string` — Строковое представление значения.
|
|
23
|
+
|
|
24
|
+
## Примеры
|
|
17
25
|
|
|
18
|
-
|
|
26
|
+
<Source
|
|
27
|
+
language='typescript'
|
|
28
|
+
code={`
|
|
19
29
|
import { anyToString } from '@dxtmisha/functional-basic'
|
|
20
30
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
31
|
+
// 1. Строки
|
|
32
|
+
anyToString(' Hello ') // 'Hello'
|
|
33
|
+
anyToString(' Hello ', true, false) // ' Hello '
|
|
34
|
+
|
|
35
|
+
// 2. Массивы
|
|
36
|
+
anyToString([1, 2, 3]) // '1,2,3'
|
|
37
|
+
anyToString([1, 2, 3], false) // '[1,2,3]'
|
|
38
|
+
|
|
39
|
+
// 3. Объекты
|
|
40
|
+
anyToString({ a: 1 }) // '{"a":1}'
|
|
24
41
|
|
|
25
|
-
|
|
26
|
-
|
|
42
|
+
// 4. Логические значения (преобразование в 1/0)
|
|
43
|
+
anyToString(true) // '1'
|
|
44
|
+
anyToString(false) // '0'
|
|
27
45
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
46
|
+
// 5. Пустые значения и типы
|
|
47
|
+
anyToString(null) // ''
|
|
48
|
+
anyToString(123) // '123'
|
|
49
|
+
anyToString(Symbol('test')) // 'Symbol(test)'
|
|
50
|
+
`}
|
|
51
|
+
/>
|
|
@@ -1,33 +1,51 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/vi/functional-basic/Functions/anyToString - Chuyển đổi một giá trị thành chuỗi'/>
|
|
4
4
|
|
|
5
5
|
# `anyToString`
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Điều này rất hữu ích khi xuất dữ liệu ra giao diện mà không biết trước kiểu của biến (đối tượng, mảng, boolean hoặc null).
|
|
7
|
+
Tiện ích để chuyển đổi an toàn bất kỳ dữ liệu đầu vào nào thành kiểu chuỗi.
|
|
10
8
|
|
|
11
9
|
**Tham số:**
|
|
12
10
|
- `value: V` — Giá trị cần chuyển đổi.
|
|
13
|
-
- `isArrayString: boolean
|
|
11
|
+
- `isArrayString: boolean = true` — Nếu `true`, các mảng nguyên thủy sẽ được nối với nhau bằng dấu phẩy.
|
|
12
|
+
- `trim: boolean = true` — Nếu `true`, loại bỏ khoảng trắng dư thừa (chỉ dành cho chuỗi).
|
|
13
|
+
|
|
14
|
+
**Quy tắc chuyển đổi:**
|
|
15
|
+
- **Chuỗi**: Trả về nguyên bản (có `trim` nếu được bật).
|
|
16
|
+
- **Mảng**: Nếu `isArrayString: true` và không có đối tượng trong mảng, các phần tử sẽ được nối bằng dấu phẩy. Ngược lại — chuyển thành chuỗi JSON.
|
|
17
|
+
- **Đối tượng**: Chuyển đổi thành JSON. Trong trường hợp lỗi (ví dụ: tham chiếu vòng), trả về `toString()` tiêu chuẩn.
|
|
18
|
+
- **Boolean**: `true` chuyển thành `'1'`, `false` thành `'0'`.
|
|
19
|
+
- **Các kiểu khác**: `null` và `undefined` trả về chuỗi rỗng. Các kiểu khác gọi `toString()`.
|
|
14
20
|
|
|
15
21
|
**Trả về:**
|
|
16
22
|
`string` — Biểu diễn chuỗi của giá trị.
|
|
17
23
|
|
|
18
|
-
|
|
24
|
+
## Ví dụ
|
|
25
|
+
|
|
26
|
+
<Source
|
|
27
|
+
language='typescript'
|
|
28
|
+
code={`
|
|
19
29
|
import { anyToString } from '@dxtmisha/functional-basic'
|
|
20
30
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
31
|
+
// 1. Chuỗi (Strings)
|
|
32
|
+
anyToString(' Hello ') // 'Hello'
|
|
33
|
+
anyToString(' Hello ', true, false) // ' Hello '
|
|
34
|
+
|
|
35
|
+
// 2. Mảng (Arrays)
|
|
36
|
+
anyToString([1, 2, 3]) // '1,2,3'
|
|
37
|
+
anyToString([1, 2, 3], false) // '[1,2,3]'
|
|
38
|
+
|
|
39
|
+
// 3. Đối tượng (Objects)
|
|
40
|
+
anyToString({ a: 1 }) // '{"a":1}'
|
|
24
41
|
|
|
25
|
-
|
|
26
|
-
|
|
42
|
+
// 4. Giá trị Boolean (chuyển đổi thành 1/0)
|
|
43
|
+
anyToString(true) // '1'
|
|
44
|
+
anyToString(false) // '0'
|
|
27
45
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
46
|
+
// 5. Giá trị rỗng và các kiểu khác
|
|
47
|
+
anyToString(null) // ''
|
|
48
|
+
anyToString(123) // '123'
|
|
49
|
+
anyToString(Symbol('test')) // 'Symbol(test)'
|
|
50
|
+
`}
|
|
51
|
+
/>
|
|
@@ -1,35 +1,47 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/en/functional-basic/Functions/applyTemplate - Applying a template to text'/>
|
|
4
4
|
|
|
5
5
|
# `applyTemplate`
|
|
6
6
|
|
|
7
|
-
A utility for
|
|
8
|
-
|
|
9
|
-
It supports:
|
|
10
|
-
- Positional markers (`%d`, `%e`, etc.) to substitute values from an array in order.
|
|
11
|
-
- Named markers (`[key]`, `{key}`) to substitute values from an object by keys.
|
|
12
|
-
- Paired tags (`[key]content[/key]`, `{key}content{/key}`) to wrap content in HTML tags or other constructs (the word `[content]` inside the passed value is replaced by the tag's generic content).
|
|
7
|
+
A utility for replacing markers in text with values from an object or an array.
|
|
13
8
|
|
|
14
9
|
**Parameters:**
|
|
15
10
|
- `text: string` — The original text containing template markers.
|
|
16
|
-
- `replacement: Record<string, string | number> | string[]` — An object or array containing values
|
|
11
|
+
- `replacement: Record<string, string | number | boolean> | string[]` — An object or array containing values.
|
|
12
|
+
|
|
13
|
+
**Replacement formats (replacement)**
|
|
14
|
+
- **Array**: Used for positional markers like `%d`, `%e`, `%f`, and so on (alphabetically).
|
|
15
|
+
- **Object**: Used for named markers in brackets `[key]` or `{key}`, as well as paired tags `[tag]text[/tag]`.
|
|
17
16
|
|
|
18
17
|
**Returns:**
|
|
19
18
|
`string` — The text with substituted values.
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
## Examples
|
|
21
|
+
|
|
22
|
+
<Source
|
|
23
|
+
language='typescript'
|
|
24
|
+
code={`
|
|
22
25
|
import { applyTemplate } from '@dxtmisha/functional-basic'
|
|
23
26
|
|
|
24
|
-
// Positional markers
|
|
25
|
-
|
|
27
|
+
// 1. Positional markers (array)
|
|
28
|
+
applyTemplate('Hello, %d %e!', ['John', 'Doe']) // 'Hello, John Doe!'
|
|
29
|
+
|
|
30
|
+
// 2. Named markers (object)
|
|
31
|
+
applyTemplate('Price: [price] {currency}', { price: 100, currency: 'USD' }) // 'Price: 100 USD'
|
|
32
|
+
|
|
33
|
+
// 3. Handling 0 and false
|
|
34
|
+
applyTemplate('Value: [val]', { val: 0 }) // 'Value: 0'
|
|
35
|
+
applyTemplate('Status: [val]', { val: false }) // 'Status: false'
|
|
36
|
+
|
|
37
|
+
// 4. Skipping missing keys
|
|
38
|
+
applyTemplate('Missing: [none]', {}) // 'Missing: [none]'
|
|
26
39
|
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
40
|
+
// 5. Paired tags with content substitution
|
|
41
|
+
const tags = { link: '<a href="https://google.com">[content]</a>' }
|
|
42
|
+
applyTemplate('Click [link]here[/link]', tags) // 'Click <a href="https://google.com">here</a>'
|
|
30
43
|
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
```
|
|
44
|
+
// 6. List macros (handling out-of-bounds)
|
|
45
|
+
applyTemplate('Macros: %d, %e, %f', ['A', 'B']) // 'Macros: A, B, '
|
|
46
|
+
`}
|
|
47
|
+
/>
|
|
@@ -1,35 +1,47 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/ru/functional-basic/Functions/applyTemplate - Применение шаблона к тексту'/>
|
|
4
4
|
|
|
5
5
|
# `applyTemplate`
|
|
6
6
|
|
|
7
|
-
Утилита для
|
|
8
|
-
|
|
9
|
-
Она поддерживает:
|
|
10
|
-
- Позиционные маркеры (`%d`, `%e` и т.д.) для подстановки значений из массива по порядку.
|
|
11
|
-
- Именованные маркеры (`[key]`, `{key}`) для подстановки значений из объекта по ключам.
|
|
12
|
-
- Парные теги (`[key]контент[/key]`, `{key}контент{/key}`) для оборачивания контента в HTML-теги или другие конструкции (слово `[content]` внутри переданного значения заменяется на содержимое тега).
|
|
7
|
+
Утилита для замены меток в тексте на значения из объекта или массива.
|
|
13
8
|
|
|
14
9
|
**Параметры:**
|
|
15
10
|
- `text: string` — Исходный текст с шаблоном.
|
|
16
|
-
- `replacement: Record<string, string | number> | string[]` — Объект или массив со
|
|
11
|
+
- `replacement: Record<string, string | number | boolean> | string[]` — Объект или массив со значениями.
|
|
12
|
+
|
|
13
|
+
**Форматы замены (replacement)**
|
|
14
|
+
- **Массив**: Используется для позиционных меток `%d`, `%e`, `%f` и далее по алфавиту.
|
|
15
|
+
- **Объект**: Используется для именованных меток в скобках `[key]` или `{key}`, а также для парных тегов `[tag]текст[/tag]`.
|
|
17
16
|
|
|
18
17
|
**Возвращает:**
|
|
19
18
|
`string` — Текст с подставленными значениями.
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
## Примеры
|
|
21
|
+
|
|
22
|
+
<Source
|
|
23
|
+
language='typescript'
|
|
24
|
+
code={`
|
|
22
25
|
import { applyTemplate } from '@dxtmisha/functional-basic'
|
|
23
26
|
|
|
24
|
-
// Позиционные маркеры
|
|
25
|
-
|
|
27
|
+
// 1. Позиционные маркеры (массив)
|
|
28
|
+
applyTemplate('Привет, %d %e!', ['Иван', 'Иванов']) // 'Привет, Иван Иванов!'
|
|
29
|
+
|
|
30
|
+
// 2. Именованные маркеры (объект)
|
|
31
|
+
applyTemplate('Цена: [price] {currency}', { price: 100, currency: 'USD' }) // 'Цена: 100 USD'
|
|
32
|
+
|
|
33
|
+
// 3. Обработка 0 и false
|
|
34
|
+
applyTemplate('Значение: [val]', { val: 0 }) // 'Значение: 0'
|
|
35
|
+
applyTemplate('Статус: [val]', { val: false }) // 'Статус: false'
|
|
36
|
+
|
|
37
|
+
// 4. Пропуск отсутствующих ключей
|
|
38
|
+
applyTemplate('Отсутствует: [none]', {}) // 'Отсутствует: [none]'
|
|
26
39
|
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
40
|
+
// 5. Парные теги с подстановкой контента
|
|
41
|
+
const tags = { link: '<a href="https://google.com">[content]</a>' }
|
|
42
|
+
applyTemplate('Нажми [link]здесь[/link]', tags) // 'Нажми <a href="https://google.com">здесь</a>'
|
|
30
43
|
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
```
|
|
44
|
+
// 6. Макросы списка (выход за границы)
|
|
45
|
+
applyTemplate('Список: %d, %e, %f', ['A', 'B']) // 'Список: A, B, '
|
|
46
|
+
`}
|
|
47
|
+
/>
|
|
@@ -1,35 +1,47 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/vi/functional-basic/Functions/applyTemplate - Áp dụng mẫu vào văn bản'/>
|
|
4
4
|
|
|
5
5
|
# `applyTemplate`
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Hàm này hỗ trợ:
|
|
10
|
-
- Các điểm đánh dấu theo vị trí (`%d`, `%e`, v.v.) để thay thế các giá trị từ một mảng theo thứ tự.
|
|
11
|
-
- Các điểm đánh dấu theo tên (`[key]`, `{key}`) để thay thế các giá trị từ một đối tượng thông qua khóa.
|
|
12
|
-
- Thẻ theo cặp (`[key]nội dung[/key]`, `{key}nội dung{/key}`) để bao bọc nội dung trong các thẻ HTML hoặc cấu trúc khác (từ `[content]` bên trong giá trị truyền vào sẽ được thay thế bởi nội dung của thẻ).
|
|
7
|
+
Tiện ích để thay thế các thẻ đánh dấu trong văn bản bằng các giá trị từ một đối tượng hoặc mảng.
|
|
13
8
|
|
|
14
9
|
**Tham số:**
|
|
15
|
-
- `text: string` — Văn bản gốc
|
|
16
|
-
- `replacement: Record<string, string | number> | string[]` —
|
|
10
|
+
- `text: string` — Văn bản gốc có mẫu.
|
|
11
|
+
- `replacement: Record<string, string | number | boolean> | string[]` — Đối tượng hoặc mảng có các giá trị.
|
|
12
|
+
|
|
13
|
+
**Định dạng thay thế (replacement)**
|
|
14
|
+
- **Mảng**: Được sử dụng cho các thẻ vị trí như `%d`, `%e`, `%f`, v.v. (theo thứ tự bảng chữ cái).
|
|
15
|
+
- **Đối tượng**: Được sử dụng cho các thẻ có tên trong ngoặc `[key]` hoặc `{key}`, cũng như các thẻ cặp `[tag]nội dung[/tag]`.
|
|
17
16
|
|
|
18
17
|
**Trả về:**
|
|
19
18
|
`string` — Văn bản với các giá trị đã được thay thế.
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
## Ví dụ
|
|
21
|
+
|
|
22
|
+
<Source
|
|
23
|
+
language='typescript'
|
|
24
|
+
code={`
|
|
22
25
|
import { applyTemplate } from '@dxtmisha/functional-basic'
|
|
23
26
|
|
|
24
|
-
//
|
|
25
|
-
|
|
27
|
+
// 1. Điểm đánh dấu vị trí (mảng)
|
|
28
|
+
applyTemplate('Xin chào, %d %e!', ['John', 'Doe']) // 'Xin chào, John Doe!'
|
|
29
|
+
|
|
30
|
+
// 2. Điểm đánh dấu có tên (đối tượng)
|
|
31
|
+
applyTemplate('Giá: [price] {currency}', { price: 100, currency: 'USD' }) // 'Giá: 100 USD'
|
|
32
|
+
|
|
33
|
+
// 3. Xử lý 0 và false
|
|
34
|
+
applyTemplate('Giá trị: [val]', { val: 0 }) // // 'Giá trị: 0'
|
|
35
|
+
applyTemplate('Trạng thái: [val]', { val: false }) // 'Trạng thái: false'
|
|
36
|
+
|
|
37
|
+
// 4. Bỏ qua các khóa bị thiếu
|
|
38
|
+
applyTemplate('Thiếu: [none]', {}) // 'Thiếu: [none]'
|
|
26
39
|
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
40
|
+
// 5. Các thẻ cặp với thay thế nội dung
|
|
41
|
+
const tags = { link: '<a href="https://google.com">[content]</a>' }
|
|
42
|
+
applyTemplate('Nhấp vào [link]đây[/link]', tags) // 'Nhấp vào <a href="https://google.com">đây</a>'
|
|
30
43
|
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
```
|
|
44
|
+
// 6. Macro danh sách (vượt quá giới hạn)
|
|
45
|
+
applyTemplate('Macros: %d, %e, %f', ['A', 'B']) // 'Macros: A, B, '
|
|
46
|
+
`}
|
|
47
|
+
/>
|
|
@@ -1,28 +1,42 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
|
-
<Meta title='@dxtmisha/en/functional-basic/Functions/blobToBase64 -
|
|
3
|
+
<Meta title='@dxtmisha/en/functional-basic/Functions/blobToBase64 - Converting Blob to Base64'/>
|
|
4
4
|
|
|
5
5
|
# `blobToBase64`
|
|
6
6
|
|
|
7
7
|
Asynchronously converts `Blob` or `File` objects into a Base64 string (Data URL).
|
|
8
8
|
|
|
9
|
-
This is useful when preparing local files (e.g., user-uploaded images) for in-browser previews or for sending to the server in string format.
|
|
10
|
-
|
|
11
9
|
**Parameters:**
|
|
12
|
-
- `blob: Blob` — The `Blob` (or `File`) object to
|
|
10
|
+
- `blob: Blob` — The `Blob` (or `File`) object to be converted.
|
|
11
|
+
- `clean: boolean = false` — If `true`, removes the Data URL prefix (e.g., `data:image/png;base64,`).
|
|
12
|
+
|
|
13
|
+
**Environment Support:**
|
|
14
|
+
The utility automatically detects the environment:
|
|
15
|
+
- **Browser**: Uses `FileReader` to read the content.
|
|
16
|
+
- **Server (SSR)**: Uses `Buffer` and the asynchronous `blob.arrayBuffer()` method.
|
|
13
17
|
|
|
14
18
|
**Returns:**
|
|
15
|
-
`Promise<string |
|
|
19
|
+
`Promise<string | undefined>` — Base64 string or `undefined` if conversion is not possible.
|
|
20
|
+
|
|
21
|
+
## Examples
|
|
16
22
|
|
|
17
|
-
|
|
23
|
+
<Source
|
|
24
|
+
language='typescript'
|
|
25
|
+
code={`
|
|
18
26
|
import { blobToBase64 } from '@dxtmisha/functional-basic'
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
// 1. Default (returns Data URL)
|
|
29
|
+
const dataUrl = await blobToBase64(file)
|
|
30
|
+
// 'data:image/png;base64,iVBORw0KGgo...'
|
|
31
|
+
|
|
32
|
+
// 2. Raw Base64 (without prefix)
|
|
33
|
+
const rawBase64 = await blobToBase64(file, true)
|
|
34
|
+
// 'iVBORw0KGgo...'
|
|
35
|
+
|
|
36
|
+
// 3. Handling API unavailability
|
|
37
|
+
const result = await blobToBase64(blob)
|
|
38
|
+
if (result) {
|
|
39
|
+
// work with string
|
|
27
40
|
}
|
|
28
|
-
|
|
41
|
+
`}
|
|
42
|
+
/>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/ru/functional-basic/Functions/blobToBase64 - Преобразование Blob в Base64'/>
|
|
4
4
|
|
|
@@ -6,23 +6,37 @@ import { Meta } from '@storybook/addon-docs/blocks'
|
|
|
6
6
|
|
|
7
7
|
Асинхронно преобразует объекты `Blob` или `File` в строку формата Base64 (Data URL).
|
|
8
8
|
|
|
9
|
-
Это полезно при подготовке локальных файлов (например, загруженных пользователем изображений) для их предпросмотра в браузере или отправки на сервер в строковом формате.
|
|
10
|
-
|
|
11
9
|
**Параметры:**
|
|
12
|
-
- `blob: Blob` — Объект `Blob` (или `File`)
|
|
10
|
+
- `blob: Blob` — Объект `Blob` (или `File`) для преобразования.
|
|
11
|
+
- `clean: boolean = false` — Если `true`, удаляет префикс Data URL (например, `data:image/png;base64,`).
|
|
12
|
+
|
|
13
|
+
**Среда выполнения:**
|
|
14
|
+
Утилита автоматически определяет доступный метод конвертации:
|
|
15
|
+
- **Браузер**: Использует `FileReader` для чтения содержимого.
|
|
16
|
+
- **Сервер (SSR)**: Использует `Buffer` и асинхронный метод `blob.arrayBuffer()`.
|
|
13
17
|
|
|
14
18
|
**Возвращает:**
|
|
15
|
-
`Promise<string |
|
|
19
|
+
`Promise<string | undefined>` — Строка Base64 или `undefined`, если конвертация невозможна.
|
|
20
|
+
|
|
21
|
+
## Примеры
|
|
16
22
|
|
|
17
|
-
|
|
23
|
+
<Source
|
|
24
|
+
language='typescript'
|
|
25
|
+
code={`
|
|
18
26
|
import { blobToBase64 } from '@dxtmisha/functional-basic'
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
// 1. По умолчанию (возвращает Data URL)
|
|
29
|
+
const dataUrl = await blobToBase64(file)
|
|
30
|
+
// 'data:image/png;base64,iVBORw0KGgo...'
|
|
31
|
+
|
|
32
|
+
// 2. Чистый Base64 (без префикса)
|
|
33
|
+
const rawBase64 = await blobToBase64(file, true)
|
|
34
|
+
// 'iVBORw0KGgo...'
|
|
35
|
+
|
|
36
|
+
// 3. Обработка случая недоступности API
|
|
37
|
+
const result = await blobToBase64(blob)
|
|
38
|
+
if (result) {
|
|
39
|
+
// работа со строкой
|
|
27
40
|
}
|
|
28
|
-
|
|
41
|
+
`}
|
|
42
|
+
/>
|
|
@@ -1,28 +1,42 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/vi/functional-basic/Functions/blobToBase64 - Chuyển đổi Blob thành Base64'/>
|
|
4
4
|
|
|
5
5
|
# `blobToBase64`
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Điều này hữu ích khi chuẩn bị các tệp cục bộ (ví dụ: hình ảnh do người dùng tải lên) để xem trước trực tiếp trên trình duyệt hoặc gửi dạng chuỗi văn bản lên máy chủ.
|
|
7
|
+
Chuyển đổi bất đồng bộ các đối tượng `Blob` hoặc `File` thành chuỗi định dạng Base64 (Data URL).
|
|
10
8
|
|
|
11
9
|
**Tham số:**
|
|
12
10
|
- `blob: Blob` — Đối tượng `Blob` (hoặc `File`) cần chuyển đổi.
|
|
11
|
+
- `clean: boolean = false` — Nếu `true`, loại bỏ tiền tố Data URL (ví dụ: `data:image/png;base64,`).
|
|
12
|
+
|
|
13
|
+
**Môi trường thực thi:**
|
|
14
|
+
Tiện ích tự động xác định phương pháp chuyển đổi khả dụng:
|
|
15
|
+
- **Trình duyệt**: Sử dụng `FileReader` để đọc nội dung.
|
|
16
|
+
- **Máy chủ (SSR)**: Sử dụng `Buffer` và phương thức bất đồng bộ `blob.arrayBuffer()`.
|
|
13
17
|
|
|
14
18
|
**Trả về:**
|
|
15
|
-
`Promise<string |
|
|
19
|
+
`Promise<string | undefined>` — Chuỗi Base64 hoặc `undefined` nếu không thể chuyển đổi.
|
|
20
|
+
|
|
21
|
+
## Ví dụ
|
|
16
22
|
|
|
17
|
-
|
|
23
|
+
<Source
|
|
24
|
+
language='typescript'
|
|
25
|
+
code={`
|
|
18
26
|
import { blobToBase64 } from '@dxtmisha/functional-basic'
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
// 1. Mặc định (trả về Data URL)
|
|
29
|
+
const dataUrl = await blobToBase64(file)
|
|
30
|
+
// 'data:image/png;base64,iVBORw0KGgo...'
|
|
31
|
+
|
|
32
|
+
// 2. Base64 thô (không có tiền tố)
|
|
33
|
+
const rawBase64 = await blobToBase64(file, true)
|
|
34
|
+
// 'iVBORw0KGgo...'
|
|
35
|
+
|
|
36
|
+
// 3. Xử lý trường hợp API không khả dụng
|
|
37
|
+
const result = await blobToBase64(blob)
|
|
38
|
+
if (result) {
|
|
39
|
+
// làm việc với chuỗi
|
|
27
40
|
}
|
|
28
|
-
|
|
41
|
+
`}
|
|
42
|
+
/>
|
|
@@ -4,18 +4,22 @@ import { Meta } from '@storybook/addon-docs/blocks'
|
|
|
4
4
|
|
|
5
5
|
# `capitalize`
|
|
6
6
|
|
|
7
|
-
Capitalizes the first letter of a string. Returns the same string if
|
|
7
|
+
Capitalizes the first letter of a string. Returns the same string if it is empty. The function is robust and safe for non-string inputs.
|
|
8
8
|
|
|
9
9
|
**Parameters:**
|
|
10
10
|
- `value: string` — The original string to capitalize.
|
|
11
|
+
- `isLocale: boolean` (optional) — If `true`, uses the current global locale (via `Geo.getLocation()`) for capitalization rules.
|
|
11
12
|
|
|
12
13
|
**Returns:**
|
|
13
14
|
`string` — The string with the first letter capitalized.
|
|
14
15
|
|
|
15
16
|
```typescript
|
|
16
|
-
import { capitalize } from '@dxtmisha/functional-basic'
|
|
17
|
+
import { capitalize, Geo } from '@dxtmisha/functional-basic'
|
|
17
18
|
|
|
18
19
|
console.log(capitalize('hello')) // 'Hello'
|
|
19
|
-
console.log(capitalize('Hello')) // 'Hello'
|
|
20
20
|
console.log(capitalize('123')) // '123'
|
|
21
|
+
|
|
22
|
+
// Locale-aware capitalization (e.g., for Turkish 'i' -> 'İ')
|
|
23
|
+
Geo.set('tr-TR')
|
|
24
|
+
console.log(capitalize('i', true)) // 'İ'
|
|
21
25
|
```
|
|
@@ -4,18 +4,22 @@ import { Meta } from '@storybook/addon-docs/blocks'
|
|
|
4
4
|
|
|
5
5
|
# `capitalize`
|
|
6
6
|
|
|
7
|
-
Делает первую букву строки заглавной. Возвращает ту же строку, если
|
|
7
|
+
Делает первую букву строки заглавной. Возвращает ту же строку, если она пуста. Функция устойчива к некорректным входным данным и безопасно обрабатывает не-строковые значения.
|
|
8
8
|
|
|
9
9
|
**Параметры:**
|
|
10
10
|
- `value: string` — Исходная строка для капитализации.
|
|
11
|
+
- `isLocale: boolean` (опционально) — Если `true`, использует текущую глобальную локаль (через `Geo.getLocation()`) для правил капитализации.
|
|
11
12
|
|
|
12
13
|
**Возвращает:**
|
|
13
14
|
`string` — Строка с заглавной первой буквой.
|
|
14
15
|
|
|
15
16
|
```typescript
|
|
16
|
-
import { capitalize } from '@dxtmisha/functional-basic'
|
|
17
|
+
import { capitalize, Geo } from '@dxtmisha/functional-basic'
|
|
17
18
|
|
|
18
19
|
console.log(capitalize('hello')) // 'Hello'
|
|
19
|
-
console.log(capitalize('Hello')) // 'Hello'
|
|
20
20
|
console.log(capitalize('123')) // '123'
|
|
21
|
+
|
|
22
|
+
// Капитализация с учетом локали (например, для турецкого 'i' -> 'İ')
|
|
23
|
+
Geo.set('tr-TR')
|
|
24
|
+
console.log(capitalize('i', true)) // 'İ'
|
|
21
25
|
```
|
|
@@ -4,18 +4,22 @@ import { Meta } from '@storybook/addon-docs/blocks'
|
|
|
4
4
|
|
|
5
5
|
# `capitalize`
|
|
6
6
|
|
|
7
|
-
Viết hoa chữ cái đầu tiên của một chuỗi. Trả về cùng một chuỗi nếu
|
|
7
|
+
Viết hoa chữ cái đầu tiên của một chuỗi. Trả về cùng một chuỗi nếu nó trống. Hàm này mạnh mẽ và an toàn cho các đầu vào không phải chuỗi.
|
|
8
8
|
|
|
9
9
|
**Tham số:**
|
|
10
10
|
- `value: string` — Chuỗi gốc cần viết hoa.
|
|
11
|
+
- `isLocale: boolean` (tùy chọn) — Nếu là `true`, sử dụng địa phương (locale) toàn cục hiện tại (thông qua `Geo.getLocation()`) cho các quy tắc viết hoa.
|
|
11
12
|
|
|
12
13
|
**Trả về:**
|
|
13
14
|
`string` — Chuỗi với chữ cái đầu tiên được viết hoa.
|
|
14
15
|
|
|
15
16
|
```typescript
|
|
16
|
-
import { capitalize } from '@dxtmisha/functional-basic'
|
|
17
|
+
import { capitalize, Geo } from '@dxtmisha/functional-basic'
|
|
17
18
|
|
|
18
19
|
console.log(capitalize('hello')) // 'Hello'
|
|
19
|
-
console.log(capitalize('Hello')) // 'Hello'
|
|
20
20
|
console.log(capitalize('123')) // '123'
|
|
21
|
+
|
|
22
|
+
// Viết hoa theo ngữ cảnh địa phương (ví dụ: đối với tiếng Thổ Nhĩ Kỳ 'i' -> 'İ')
|
|
23
|
+
Geo.set('tr-TR')
|
|
24
|
+
console.log(capitalize('i', true)) // 'İ'
|
|
21
25
|
```
|