@dxtmisha/functional-basic 1.3.15 → 1.4.1
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/CHANGELOG.md +14 -0
- package/ai-description.md +20 -13
- package/ai-types.md +642 -332
- package/dist/library.js +493 -400
- package/dist/src/classes/GeoFlag.d.ts +29 -1
- package/dist/src/classes/HashInstance.d.ts +8 -74
- package/dist/src/classes/Query.d.ts +57 -0
- package/dist/src/classes/QueryInstance.d.ts +29 -0
- package/dist/src/classes/UrlInstanceAbstract.d.ts +94 -0
- package/dist/src/classes/UrlItem.d.ts +48 -0
- package/dist/src/library.d.ts +3 -0
- package/dist/src/types/geoTypes.d.ts +4 -0
- package/package.json +1 -1
|
@@ -30,6 +30,14 @@ export declare class GeoFlag {
|
|
|
30
30
|
* @returns country information / информация о стране
|
|
31
31
|
*/
|
|
32
32
|
get(code?: string): GeoFlagItem | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* Returns information about the language and its flag.
|
|
35
|
+
*
|
|
36
|
+
* Возвращает информацию о языке и его флаге.
|
|
37
|
+
* @param code country code / код страны
|
|
38
|
+
* @returns language information / информация о языке
|
|
39
|
+
*/
|
|
40
|
+
getLanguage(code?: string): GeoFlagItem | undefined;
|
|
33
41
|
/**
|
|
34
42
|
* Returns the country code.
|
|
35
43
|
*
|
|
@@ -56,6 +64,17 @@ export declare class GeoFlag {
|
|
|
56
64
|
* @returns list of countries / список стран
|
|
57
65
|
*/
|
|
58
66
|
getList(codes?: string[], sort?: boolean): GeoFlagItem[];
|
|
67
|
+
/**
|
|
68
|
+
* Returns a list of languages based on the provided codes.
|
|
69
|
+
* If no codes are provided, returns all available languages.
|
|
70
|
+
*
|
|
71
|
+
* Возвращает список языков на основе предоставленных кодов.
|
|
72
|
+
* Если коды не переданы, возвращает все доступные языки.
|
|
73
|
+
* @param codes array of country codes / массив кодов стран
|
|
74
|
+
* @param sort whether to sort the list / сортировать ли список
|
|
75
|
+
* @returns list of languages / список языков
|
|
76
|
+
*/
|
|
77
|
+
getListLanguage(codes?: string[], sort?: boolean): GeoFlagItem[];
|
|
59
78
|
/**
|
|
60
79
|
* Returns a list of countries in their national languages.
|
|
61
80
|
*
|
|
@@ -65,6 +84,15 @@ export declare class GeoFlag {
|
|
|
65
84
|
* @returns list of countries with national names / список стран с национальными названиями
|
|
66
85
|
*/
|
|
67
86
|
getNational(codes?: string[], sort?: boolean): GeoFlagNational[];
|
|
87
|
+
/**
|
|
88
|
+
* Returns a list of languages in their national names.
|
|
89
|
+
*
|
|
90
|
+
* Возвращает список языков на их национальных названиях.
|
|
91
|
+
* @param codes array of country codes / массив кодов стран
|
|
92
|
+
* @param sort whether to sort the list / сортировать ли список
|
|
93
|
+
* @returns list of languages with national names / список языков с национальными названиями
|
|
94
|
+
*/
|
|
95
|
+
getNationalLanguage(codes?: string[], sort?: boolean): GeoFlagNational[];
|
|
68
96
|
/**
|
|
69
97
|
* Changes the current locale/location.
|
|
70
98
|
*
|
|
@@ -96,7 +124,7 @@ export declare class GeoFlag {
|
|
|
96
124
|
* Получение названия языка.
|
|
97
125
|
* @param data object with information of data/ объект с информацией данных
|
|
98
126
|
*/
|
|
99
|
-
protected
|
|
127
|
+
protected getLanguageName(data: GeoItemFull): string;
|
|
100
128
|
/**
|
|
101
129
|
* Getting the name of the country.
|
|
102
130
|
*
|
|
@@ -1,95 +1,29 @@
|
|
|
1
|
+
import { UrlInstanceAbstract } from './UrlInstanceAbstract';
|
|
1
2
|
/**
|
|
2
3
|
* Class for working with data stored in the URL hash.
|
|
3
4
|
*
|
|
4
5
|
* Класс для работы с данными, сохранёнными в хеше URL.
|
|
5
6
|
*/
|
|
6
|
-
export declare class HashInstance {
|
|
7
|
-
private hash?;
|
|
8
|
-
private watch;
|
|
9
|
-
private block;
|
|
10
|
-
private time?;
|
|
7
|
+
export declare class HashInstance extends UrlInstanceAbstract {
|
|
11
8
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* Получение данных из хэша.
|
|
15
|
-
* @param name variable name / название переменной
|
|
16
|
-
* @param defaultValue value or function to change data / значение или функция для изменения данных
|
|
17
|
-
* @returns stored value / сохранённое значение
|
|
18
|
-
*/
|
|
19
|
-
get<T>(name: string, defaultValue?: T | (() => T)): T;
|
|
20
|
-
/**
|
|
21
|
-
* Change data in hash.
|
|
22
|
-
*
|
|
23
|
-
* Изменение данных в хэше.
|
|
24
|
-
* @param name variable name / название переменной
|
|
25
|
-
* @param callback value or function to change data / значение или функция для изменения данных
|
|
26
|
-
* @returns this instance / текущий экземпляр
|
|
27
|
-
*/
|
|
28
|
-
set<T>(name: string, callback: T | (() => T)): this;
|
|
29
|
-
/**
|
|
30
|
-
* Adding an event when data is changed.
|
|
31
|
-
*
|
|
32
|
-
* Добавление события при изменении данных.
|
|
33
|
-
* @param name variable name / название переменной
|
|
34
|
-
* @param callback the function is called when the data is changed / функция вызывается при изменении данных
|
|
35
|
-
* @returns this instance / текущий экземпляр
|
|
36
|
-
*/
|
|
37
|
-
addWatch<T>(name: string, callback: (value: T) => void): this;
|
|
38
|
-
/**
|
|
39
|
-
* Removing an event when data is changed.
|
|
40
|
-
*
|
|
41
|
-
* Удаление события при изменении данных.
|
|
42
|
-
* @param name variable name / название переменной
|
|
43
|
-
* @param callback the function is called when the data is changed / функция вызывается при изменении данных
|
|
44
|
-
* @returns this instance / текущий экземпляр
|
|
45
|
-
*/
|
|
46
|
-
removeWatch<T>(name: string, callback: (value: T) => void): this;
|
|
47
|
-
/**
|
|
48
|
-
* Update hash variable from URL string.
|
|
9
|
+
* Initializes hash data and registers the hashchange listener.
|
|
49
10
|
*
|
|
50
|
-
*
|
|
11
|
+
* Инициализирует данные хэша и регистрирует слушатель hashchange.
|
|
51
12
|
* @returns this instance / текущий экземпляр
|
|
52
13
|
*/
|
|
53
|
-
|
|
14
|
+
protected init(): this;
|
|
54
15
|
/**
|
|
55
16
|
* Obtaining data from the URL string.
|
|
56
17
|
*
|
|
57
18
|
* Получение данных из строки URL.
|
|
58
19
|
* @returns Record<string, any> hash data / данные хэша
|
|
59
20
|
*/
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Returns the hash object, initializing if needed.
|
|
63
|
-
*
|
|
64
|
-
* Возвращает объект хэша, инициализируя при необходимости.
|
|
65
|
-
* @returns Record<string, any> hash object / объект хэша
|
|
66
|
-
*/
|
|
67
|
-
private getHash;
|
|
68
|
-
/**
|
|
69
|
-
* Initializes hash data and registers the hashchange listener.
|
|
70
|
-
*
|
|
71
|
-
* Инициализирует данные хэша и регистрирует слушатель hashchange.
|
|
72
|
-
* @returns this instance / текущий экземпляр
|
|
73
|
-
*/
|
|
74
|
-
private init;
|
|
75
|
-
/**
|
|
76
|
-
* Reads hash data from the URL and triggers watchers.
|
|
77
|
-
*
|
|
78
|
-
* Считывает данные хэша из URL и вызывает наблюдателей.
|
|
79
|
-
* @returns this instance / текущий экземпляр
|
|
80
|
-
*/
|
|
81
|
-
private initData;
|
|
21
|
+
protected getLocation(): Record<string, any>;
|
|
82
22
|
/**
|
|
83
23
|
* Update hash string in URL.
|
|
84
24
|
*
|
|
85
25
|
* Обновление строки хэша в URL.
|
|
26
|
+
* @returns this instance / текущий экземпляр
|
|
86
27
|
*/
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Calling all functions whose data has changed.
|
|
90
|
-
*
|
|
91
|
-
* Вызов всех функций, у которых были изменены данные.
|
|
92
|
-
* @param location fresh data / свежие данные
|
|
93
|
-
*/
|
|
94
|
-
private makeWatch;
|
|
28
|
+
protected update(): this;
|
|
95
29
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { QueryInstance } from './QueryInstance';
|
|
2
|
+
/**
|
|
3
|
+
* Static class for working with data stored in the URL query parameters.
|
|
4
|
+
* Provides a centralized interface delegating to QueryInstance.
|
|
5
|
+
*
|
|
6
|
+
* Статический класс для работы с данными, сохранёнными в query-параметрах URL.
|
|
7
|
+
* Предоставляет централизованный интерфейс, делегируя вызовы QueryInstance.
|
|
8
|
+
*/
|
|
9
|
+
export declare class Query {
|
|
10
|
+
/**
|
|
11
|
+
* Returns a request-isolated instance of QueryInstance.
|
|
12
|
+
*
|
|
13
|
+
* Возвращает изолированный в рамках запроса экземпляр QueryInstance.
|
|
14
|
+
* @returns QueryInstance instance / экземпляр QueryInstance
|
|
15
|
+
*/
|
|
16
|
+
static getItem(): QueryInstance;
|
|
17
|
+
/**
|
|
18
|
+
* Get data from query.
|
|
19
|
+
*
|
|
20
|
+
* Получение данных из query-параметров.
|
|
21
|
+
* @param name variable name / название переменной
|
|
22
|
+
* @param defaultValue value or function to change data / значение или функция для изменения данных
|
|
23
|
+
* @returns stored value / сохранённое значение
|
|
24
|
+
*/
|
|
25
|
+
static get<T>(name: string, defaultValue?: T | (() => T)): T;
|
|
26
|
+
/**
|
|
27
|
+
* Change data in query.
|
|
28
|
+
*
|
|
29
|
+
* Изменение данных в query-параметрах.
|
|
30
|
+
* @param name variable name / название переменной
|
|
31
|
+
* @param callback value or function to change data / значение или функция для изменения данных
|
|
32
|
+
*/
|
|
33
|
+
static set<T>(name: string, callback: T | (() => T)): void;
|
|
34
|
+
/**
|
|
35
|
+
* Adding an event when data is changed.
|
|
36
|
+
*
|
|
37
|
+
* Добавление события при изменении данных.
|
|
38
|
+
* @param name variable name / название переменной
|
|
39
|
+
* @param callback the function is called when the data is changed / функция вызывается при изменении данных
|
|
40
|
+
*/
|
|
41
|
+
static addWatch<T>(name: string, callback: (value: T) => void): void;
|
|
42
|
+
/**
|
|
43
|
+
* Removing an event when data is changed.
|
|
44
|
+
*
|
|
45
|
+
* Удаление события при изменении данных.
|
|
46
|
+
* @param name variable name / название переменной
|
|
47
|
+
* @param callback the function is called when the data is changed / функция вызывается при изменении данных
|
|
48
|
+
*/
|
|
49
|
+
static removeWatch<T>(name: string, callback: (value: T) => void): void;
|
|
50
|
+
/**
|
|
51
|
+
* Update query variables from URL string.
|
|
52
|
+
*
|
|
53
|
+
* Обновление переменных query-параметров из строки URL.
|
|
54
|
+
* @returns void
|
|
55
|
+
*/
|
|
56
|
+
static reload(): void;
|
|
57
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { UrlInstanceAbstract } from './UrlInstanceAbstract';
|
|
2
|
+
/**
|
|
3
|
+
* Class for working with data stored in the URL query parameters.
|
|
4
|
+
*
|
|
5
|
+
* Класс для работы с данными, сохранёнными в query-параметрах URL.
|
|
6
|
+
*/
|
|
7
|
+
export declare class QueryInstance extends UrlInstanceAbstract {
|
|
8
|
+
/**
|
|
9
|
+
* Initializes query data and registers the popstate listener.
|
|
10
|
+
*
|
|
11
|
+
* Инициализирует данные query-параметров и регистрирует слушатель popstate.
|
|
12
|
+
* @returns this instance / текущий экземпляр
|
|
13
|
+
*/
|
|
14
|
+
protected init(): this;
|
|
15
|
+
/**
|
|
16
|
+
* Obtaining data from the URL string.
|
|
17
|
+
*
|
|
18
|
+
* Получение данных из строки URL.
|
|
19
|
+
* @returns Record<string, any> query data / данные query-параметров
|
|
20
|
+
*/
|
|
21
|
+
protected getLocation(): Record<string, any>;
|
|
22
|
+
/**
|
|
23
|
+
* Update query string in URL.
|
|
24
|
+
*
|
|
25
|
+
* Обновление строки query-параметров в URL.
|
|
26
|
+
* @returns this instance / текущий экземпляр
|
|
27
|
+
*/
|
|
28
|
+
protected update(): this;
|
|
29
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base abstract class for working with URL-based states (Hash, Query).
|
|
3
|
+
*
|
|
4
|
+
* Базовый абстрактный класс для работы с состояниями на основе URL (Hash, Query).
|
|
5
|
+
*/
|
|
6
|
+
export declare abstract class UrlInstanceAbstract {
|
|
7
|
+
protected data?: Record<string, any>;
|
|
8
|
+
protected watch: Record<string, ((value: any) => void)[]>;
|
|
9
|
+
protected block: boolean;
|
|
10
|
+
protected time?: any;
|
|
11
|
+
/**
|
|
12
|
+
* Get data.
|
|
13
|
+
*
|
|
14
|
+
* Получение данных.
|
|
15
|
+
* @param name variable name / название переменной
|
|
16
|
+
* @param defaultValue value or function to change data / значение или функция для изменения данных
|
|
17
|
+
* @returns stored value / сохранённое значение
|
|
18
|
+
*/
|
|
19
|
+
get<T>(name: string, defaultValue?: T | (() => T)): T;
|
|
20
|
+
/**
|
|
21
|
+
* Change data.
|
|
22
|
+
*
|
|
23
|
+
* Изменение данных.
|
|
24
|
+
* @param name variable name / название переменной
|
|
25
|
+
* @param callback value or function to change data / значение или функция для изменения данных
|
|
26
|
+
* @returns this instance / текущий экземпляр
|
|
27
|
+
*/
|
|
28
|
+
set<T>(name: string, callback: T | (() => T)): this;
|
|
29
|
+
/**
|
|
30
|
+
* Adding an event when data is changed.
|
|
31
|
+
*
|
|
32
|
+
* Добавление события при изменении данных.
|
|
33
|
+
* @param name variable name / название переменной
|
|
34
|
+
* @param callback the function is called when the data is changed / функция вызывается при изменении данных
|
|
35
|
+
* @returns this instance / текущий экземпляр
|
|
36
|
+
*/
|
|
37
|
+
addWatch<T>(name: string, callback: (value: T) => void): this;
|
|
38
|
+
/**
|
|
39
|
+
* Removing an event when data is changed.
|
|
40
|
+
*
|
|
41
|
+
* Удаление события при изменении данных.
|
|
42
|
+
* @param name variable name / название переменной
|
|
43
|
+
* @param callback the function is called when the data is changed / функция вызывается при изменении данных
|
|
44
|
+
* @returns this instance / текущий экземпляр
|
|
45
|
+
*/
|
|
46
|
+
removeWatch<T>(name: string, callback: (value: T) => void): this;
|
|
47
|
+
/**
|
|
48
|
+
* Update variables from URL string.
|
|
49
|
+
*
|
|
50
|
+
* Обновление переменных из строки URL.
|
|
51
|
+
* @returns this instance / текущий экземпляр
|
|
52
|
+
*/
|
|
53
|
+
reload(): this;
|
|
54
|
+
/**
|
|
55
|
+
* Returns the query/hash data object, initializing if needed.
|
|
56
|
+
*
|
|
57
|
+
* Возвращает объект данных, инициализируя при необходимости.
|
|
58
|
+
* @returns Record<string, any> data object / объект данных
|
|
59
|
+
*/
|
|
60
|
+
protected getData(): Record<string, any>;
|
|
61
|
+
/**
|
|
62
|
+
* Reads data from the URL and triggers watchers.
|
|
63
|
+
*
|
|
64
|
+
* Считывает данные из URL и вызывает наблюдателей.
|
|
65
|
+
* @returns this instance / текущий экземпляр
|
|
66
|
+
*/
|
|
67
|
+
protected initData(): this;
|
|
68
|
+
/**
|
|
69
|
+
* Calling all functions whose data has changed.
|
|
70
|
+
*
|
|
71
|
+
* Вызов всех функций, у которых были изменены данные.
|
|
72
|
+
* @param location fresh data / свежие данные
|
|
73
|
+
* @returns this instance / текущий экземпляр
|
|
74
|
+
*/
|
|
75
|
+
protected makeWatch(location: Record<string, any>): this;
|
|
76
|
+
/**
|
|
77
|
+
* Initializes data and event listeners.
|
|
78
|
+
*
|
|
79
|
+
* Инициализирует данные и слушатели событий.
|
|
80
|
+
*/
|
|
81
|
+
protected abstract init(): this;
|
|
82
|
+
/**
|
|
83
|
+
* Obtaining data from the URL string.
|
|
84
|
+
*
|
|
85
|
+
* Получение данных из строки URL.
|
|
86
|
+
*/
|
|
87
|
+
protected abstract getLocation(): Record<string, any>;
|
|
88
|
+
/**
|
|
89
|
+
* Update string in URL.
|
|
90
|
+
*
|
|
91
|
+
* Обновление строки в URL.
|
|
92
|
+
*/
|
|
93
|
+
protected abstract update(): this;
|
|
94
|
+
}
|
|
@@ -46,6 +46,29 @@ export declare class UrlItem {
|
|
|
46
46
|
get hash(): string;
|
|
47
47
|
/** Origin of the URL (readonly) / Источник URL (только для чтения) */
|
|
48
48
|
get origin(): string;
|
|
49
|
+
/**
|
|
50
|
+
* Checks if the specified query parameter exists.
|
|
51
|
+
*
|
|
52
|
+
* Проверяет, существует ли указанный параметр запроса.
|
|
53
|
+
* @param name parameter name / имя параметра
|
|
54
|
+
* @returns check result / результат проверки
|
|
55
|
+
*/
|
|
56
|
+
hasParam(name: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Returns the value of a query parameter.
|
|
59
|
+
*
|
|
60
|
+
* Возвращает значение параметра запроса.
|
|
61
|
+
* @param name parameter name / имя параметра
|
|
62
|
+
* @returns parameter value or undefined if not found / значение параметра или undefined, если не найдено
|
|
63
|
+
*/
|
|
64
|
+
getParam(name: string): string | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Returns all query parameters as an object with transformed types.
|
|
67
|
+
*
|
|
68
|
+
* Возвращает все параметры запроса в виде объекта с преобразованными типами.
|
|
69
|
+
* @returns Record<string, any> object of parameters / объект параметров
|
|
70
|
+
*/
|
|
71
|
+
getParams(): Record<string, any>;
|
|
49
72
|
/**
|
|
50
73
|
* Updates the URL value.
|
|
51
74
|
*
|
|
@@ -54,6 +77,31 @@ export declare class UrlItem {
|
|
|
54
77
|
* @returns this Url instance / текущий экземпляр Url
|
|
55
78
|
*/
|
|
56
79
|
set(url?: string | URL): this;
|
|
80
|
+
/**
|
|
81
|
+
* Sets the value of a query parameter.
|
|
82
|
+
*
|
|
83
|
+
* Устанавливает значение параметра запроса.
|
|
84
|
+
* @param name parameter name / имя параметра
|
|
85
|
+
* @param value parameter value / значение параметра
|
|
86
|
+
* @returns this UrlItem instance / текущий экземпляр UrlItem
|
|
87
|
+
*/
|
|
88
|
+
setParam(name: string, value: string): this;
|
|
89
|
+
/**
|
|
90
|
+
* Replaces all query parameters with the specified object.
|
|
91
|
+
*
|
|
92
|
+
* Заменяет все параметры запроса на указанный объект.
|
|
93
|
+
* @param params parameters to set / параметры для установки
|
|
94
|
+
* @returns this UrlItem instance / текущий экземпляр UrlItem
|
|
95
|
+
*/
|
|
96
|
+
setParams(params: Record<string, any>): this;
|
|
97
|
+
/**
|
|
98
|
+
* Deletes a query parameter.
|
|
99
|
+
*
|
|
100
|
+
* Удаляет параметр запроса.
|
|
101
|
+
* @param name parameter name / имя параметра
|
|
102
|
+
* @returns this UrlItem instance / текущий экземпляр UrlItem
|
|
103
|
+
*/
|
|
104
|
+
deleteParam(name: string): this;
|
|
57
105
|
/**
|
|
58
106
|
* Converts the Url instance to its string representation.
|
|
59
107
|
*
|
package/dist/src/library.d.ts
CHANGED
|
@@ -42,6 +42,8 @@ export * from './classes/MetaManager';
|
|
|
42
42
|
export * from './classes/MetaOg';
|
|
43
43
|
export * from './classes/MetaStatic';
|
|
44
44
|
export * from './classes/MetaTwitter';
|
|
45
|
+
export * from './classes/Query';
|
|
46
|
+
export * from './classes/QueryInstance';
|
|
45
47
|
export * from './classes/ResumableTimer';
|
|
46
48
|
export * from './classes/ScrollbarWidth';
|
|
47
49
|
export * from './classes/SearchList';
|
|
@@ -54,6 +56,7 @@ export * from './classes/StorageCallback';
|
|
|
54
56
|
export * from './classes/Translate';
|
|
55
57
|
export * from './classes/TranslateFile';
|
|
56
58
|
export * from './classes/TranslateInstance';
|
|
59
|
+
export * from './classes/UrlInstanceAbstract';
|
|
57
60
|
export * from './classes/UrlItem';
|
|
58
61
|
export * from './functions/addTagHighlightMatch';
|
|
59
62
|
export * from './functions/anyToString';
|
|
@@ -49,8 +49,12 @@ export interface GeoItemFull extends Omit<GeoItem, 'firstDay'> {
|
|
|
49
49
|
export interface GeoFlagItem {
|
|
50
50
|
/** Language name/ Название языка */
|
|
51
51
|
language: string;
|
|
52
|
+
/** Language code/ Код языка */
|
|
53
|
+
languageCode: string;
|
|
52
54
|
/** Country name/ Название страны */
|
|
53
55
|
country: string;
|
|
56
|
+
/** Country code/ Код страны */
|
|
57
|
+
countryCode: string;
|
|
54
58
|
/** Standard locale code/ Стандартный код локали */
|
|
55
59
|
standard: string;
|
|
56
60
|
/** Flag icon identifier/ Идентификатор иконки флага */
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxtmisha/functional-basic",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.4.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Foundational utility library for modern web development — HTTP client, geolocation, i18n, SEO meta tags, caching, storage, DOM utilities, and more. Framework-agnostic, zero dependencies, TypeScript-first.",
|
|
7
7
|
"keywords": [
|