@dxtmisha/functional-basic 0.1.1 → 0.2.0
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/functions/copyObjectLite.d.ts +9 -0
- package/dist/functions/isDomData.d.ts +6 -0
- package/dist/library.d.ts +2 -0
- package/dist/library.js +414 -413
- package/package.json +1 -3
- package/src/classes/Api.ts +0 -407
- package/src/classes/ApiDefault.ts +0 -83
- package/src/classes/ApiHeaders.ts +0 -52
- package/src/classes/ApiPreparation.ts +0 -114
- package/src/classes/ApiResponse.ts +0 -293
- package/src/classes/ApiStatus.ts +0 -173
- package/src/classes/BroadcastMessage.ts +0 -73
- package/src/classes/Cache.ts +0 -60
- package/src/classes/CacheItem.ts +0 -95
- package/src/classes/CacheStatic.ts +0 -30
- package/src/classes/Cookie.ts +0 -135
- package/src/classes/CookieBlock.ts +0 -31
- package/src/classes/DataStorage.ts +0 -194
- package/src/classes/Datetime.ts +0 -891
- package/src/classes/EventItem.ts +0 -373
- package/src/classes/Geo.ts +0 -320
- package/src/classes/GeoFlag.ts +0 -386
- package/src/classes/GeoIntl.ts +0 -839
- package/src/classes/GeoPhone.ts +0 -272
- package/src/classes/Global.ts +0 -32
- package/src/classes/Hash.ts +0 -142
- package/src/classes/Icons.ts +0 -165
- package/src/classes/Loading.ts +0 -90
- package/src/classes/Meta.ts +0 -284
- package/src/classes/MetaManager.ts +0 -200
- package/src/classes/MetaOg.ts +0 -147
- package/src/classes/MetaTwitter.ts +0 -154
- package/src/classes/ScrollbarWidth.ts +0 -86
- package/src/classes/Translate.ts +0 -293
- package/src/classes/__tests__/Api.test.ts +0 -728
- package/src/classes/__tests__/ApiDefault.test.ts +0 -222
- package/src/classes/__tests__/ApiHeaders.test.ts +0 -447
- package/src/classes/__tests__/ApiPreparation.test.ts +0 -257
- package/src/classes/__tests__/ApiResponse.test.ts +0 -547
- package/src/classes/__tests__/ApiStatus.test.ts +0 -403
- package/src/classes/__tests__/Meta.test.ts +0 -629
- package/src/classes/__tests__/MetaManager.test.ts +0 -836
- package/src/classes/__tests__/MetaOg.test.ts +0 -677
- package/src/classes/__tests__/MetaTwitter.test.ts +0 -423
- package/src/functions/anyToString.ts +0 -36
- package/src/functions/applyTemplate.ts +0 -63
- package/src/functions/arrFill.ts +0 -10
- package/src/functions/copyObject.ts +0 -10
- package/src/functions/createElement.ts +0 -40
- package/src/functions/domQuerySelector.ts +0 -15
- package/src/functions/domQuerySelectorAll.ts +0 -15
- package/src/functions/encodeAttribute.ts +0 -15
- package/src/functions/eventStopPropagation.ts +0 -10
- package/src/functions/executeFunction.ts +0 -13
- package/src/functions/executePromise.ts +0 -19
- package/src/functions/forEach.ts +0 -39
- package/src/functions/frame.ts +0 -38
- package/src/functions/getAttributes.ts +0 -27
- package/src/functions/getClipboardData.ts +0 -13
- package/src/functions/getColumn.ts +0 -18
- package/src/functions/getElement.ts +0 -35
- package/src/functions/getElementId.ts +0 -39
- package/src/functions/getElementItem.ts +0 -27
- package/src/functions/getElementOrWindow.ts +0 -23
- package/src/functions/getExp.ts +0 -21
- package/src/functions/getItemByPath.ts +0 -24
- package/src/functions/getKey.ts +0 -9
- package/src/functions/getLengthOfAllArray.ts +0 -13
- package/src/functions/getMaxLengthAllArray.ts +0 -13
- package/src/functions/getMinLengthAllArray.ts +0 -13
- package/src/functions/getMouseClient.ts +0 -17
- package/src/functions/getMouseClientX.ts +0 -9
- package/src/functions/getMouseClientY.ts +0 -9
- package/src/functions/getObjectByKeys.ts +0 -24
- package/src/functions/getObjectNoUndefined.ts +0 -23
- package/src/functions/getObjectOrNone.ts +0 -11
- package/src/functions/getRandomText.ts +0 -29
- package/src/functions/getRequestString.ts +0 -21
- package/src/functions/getStepPercent.ts +0 -19
- package/src/functions/getStepValue.ts +0 -19
- package/src/functions/goScroll.ts +0 -40
- package/src/functions/inArray.ts +0 -10
- package/src/functions/initScrollbarOffset.ts +0 -14
- package/src/functions/intersectKey.ts +0 -34
- package/src/functions/isArray.ts +0 -9
- package/src/functions/isDifferent.ts +0 -27
- package/src/functions/isDomRuntime.ts +0 -12
- package/src/functions/isFilled.ts +0 -49
- package/src/functions/isFloat.ts +0 -16
- package/src/functions/isFunction.ts +0 -11
- package/src/functions/isInDom.ts +0 -15
- package/src/functions/isIntegerBetween.ts +0 -11
- package/src/functions/isNull.ts +0 -11
- package/src/functions/isNumber.ts +0 -16
- package/src/functions/isObject.ts +0 -9
- package/src/functions/isObjectNotArray.ts +0 -11
- package/src/functions/isSelected.ts +0 -32
- package/src/functions/isSelectedByList.ts +0 -19
- package/src/functions/isString.ts +0 -9
- package/src/functions/isWindow.ts +0 -11
- package/src/functions/random.ts +0 -10
- package/src/functions/replaceRecursive.ts +0 -60
- package/src/functions/replaceTemplate.ts +0 -22
- package/src/functions/secondToTime.ts +0 -20
- package/src/functions/setElementItem.ts +0 -56
- package/src/functions/setValues.ts +0 -59
- package/src/functions/splice.ts +0 -59
- package/src/functions/strFill.ts +0 -12
- package/src/functions/toArray.ts +0 -19
- package/src/functions/toCamelCase.ts +0 -16
- package/src/functions/toCamelCaseFirst.ts +0 -12
- package/src/functions/toDate.ts +0 -44
- package/src/functions/toKebabCase.ts +0 -25
- package/src/functions/toNumber.ts +0 -35
- package/src/functions/toNumberByMax.ts +0 -33
- package/src/functions/toPercent.ts +0 -10
- package/src/functions/toPercentBy100.ts +0 -12
- package/src/functions/transformation.ts +0 -59
- package/src/functions/uniqueArray.ts +0 -9
- package/src/functions/writeClipboardData.ts +0 -17
- package/src/library.ts +0 -116
- package/src/types/apiTypes.ts +0 -143
- package/src/types/basicTypes.ts +0 -155
- package/src/types/geoTypes.ts +0 -109
- package/src/types/metaTypes.ts +0 -764
- package/src/vite-env.d.ts +0 -1
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
import { executeFunction } from '../functions/executeFunction'
|
|
2
|
-
import { executePromise } from '../functions/executePromise'
|
|
3
|
-
import { isDomRuntime } from '../functions/isDomRuntime'
|
|
4
|
-
import { isFilled } from '../functions/isFilled'
|
|
5
|
-
import { isFunction } from '../functions/isFunction'
|
|
6
|
-
import { isObjectNotArray } from '../functions/isObjectNotArray'
|
|
7
|
-
import { random } from '../functions/random'
|
|
8
|
-
import { toArray } from '../functions/toArray'
|
|
9
|
-
|
|
10
|
-
import { ApiDefault } from './ApiDefault'
|
|
11
|
-
import { Loading } from './Loading'
|
|
12
|
-
|
|
13
|
-
import {
|
|
14
|
-
type ApiFetch,
|
|
15
|
-
type ApiMethod,
|
|
16
|
-
ApiMethodItem,
|
|
17
|
-
type ApiResponseItem
|
|
18
|
-
} from '../types/apiTypes'
|
|
19
|
-
|
|
20
|
-
const CLASS_RESPONSE_LOADING = 'd-response-loading'
|
|
21
|
-
|
|
22
|
-
export class ApiResponse {
|
|
23
|
-
/** List of first-time API requests/ Список первичных API запросов */
|
|
24
|
-
protected readonly first: ApiResponseItem[] = []
|
|
25
|
-
|
|
26
|
-
/** Cached responses/ Кешированные ответы */
|
|
27
|
-
protected readonly response: ApiResponseItem[] = []
|
|
28
|
-
|
|
29
|
-
/** Loading instance/ Экземпляр загрузки */
|
|
30
|
-
protected loading?: any
|
|
31
|
-
|
|
32
|
-
/** Developer mode flag/ Флаг режима разработчика */
|
|
33
|
-
protected devMode: boolean = false
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Constructor
|
|
37
|
-
* @param requestDefault default request processor/ процессор запросов по умолчанию
|
|
38
|
-
*/
|
|
39
|
-
constructor(
|
|
40
|
-
protected readonly requestDefault: ApiDefault
|
|
41
|
-
) {
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Checks if there is a global cached request, if there is, returns it.
|
|
46
|
-
*
|
|
47
|
-
* Проверяет, есть ли глобальный кешированный запрос, если есть, возвращает его.
|
|
48
|
-
* @param path link to the request/ ссылка на запрос
|
|
49
|
-
* @param method request method/ метод запроса
|
|
50
|
-
* @param request data for the request/ данные для запроса
|
|
51
|
-
* @param devMode is it developer mode/ является ли режим разработчика
|
|
52
|
-
*/
|
|
53
|
-
get(
|
|
54
|
-
path: string = '',
|
|
55
|
-
method: ApiMethod,
|
|
56
|
-
request?: ApiFetch['request'],
|
|
57
|
-
devMode?: boolean
|
|
58
|
-
): ApiResponseItem | undefined {
|
|
59
|
-
return this.response.find((item) => {
|
|
60
|
-
if (
|
|
61
|
-
!this.isDisable(item)
|
|
62
|
-
&& this.isPath(item, path)
|
|
63
|
-
&& method === item.method
|
|
64
|
-
&& this.isFirst(item, devMode)
|
|
65
|
-
&& this.isResponse(item, request)
|
|
66
|
-
) {
|
|
67
|
-
if (this.isDevMode(devMode)) {
|
|
68
|
-
console.warn(`Response type: ${item.path}`)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
this.first.push(item)
|
|
72
|
-
return true
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return false
|
|
76
|
-
})
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Returns a list of data about the emulator.
|
|
81
|
-
*
|
|
82
|
-
* Возвращает список данных об эмуляторе.
|
|
83
|
-
*/
|
|
84
|
-
getList(): (ApiResponseItem & Record<string, any>)[] {
|
|
85
|
-
return this.response.filter(item => item.isForGlobal !== true)
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Adding cached requests.
|
|
90
|
-
*
|
|
91
|
-
* Добавление кешированных запросов.
|
|
92
|
-
* @param response data for caching/ данные для кеширования
|
|
93
|
-
*/
|
|
94
|
-
add(
|
|
95
|
-
response: ApiResponseItem | ApiResponseItem[]
|
|
96
|
-
): this {
|
|
97
|
-
this.response.push(...toArray(response) as ApiResponseItem[])
|
|
98
|
-
return this
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Sets developer mode.
|
|
103
|
-
*
|
|
104
|
-
* Устанавливает режим разработчика.
|
|
105
|
-
* @param devMode is it developer mode/ является ли режим разработчика
|
|
106
|
-
*/
|
|
107
|
-
setDevMode(devMode: boolean): this {
|
|
108
|
-
this.devMode = devMode
|
|
109
|
-
return this
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Выполнение эмулятора, если доступно
|
|
114
|
-
* @param apiFetch property of the request/ свойство запроса
|
|
115
|
-
*/
|
|
116
|
-
async emulator<T>(apiFetch: ApiFetch): Promise<T | undefined> {
|
|
117
|
-
const {
|
|
118
|
-
path = '',
|
|
119
|
-
method = ApiMethodItem.get,
|
|
120
|
-
global = method === ApiMethodItem.get,
|
|
121
|
-
devMode = false
|
|
122
|
-
} = apiFetch
|
|
123
|
-
|
|
124
|
-
if (
|
|
125
|
-
global
|
|
126
|
-
|| this.isDevMode(devMode)
|
|
127
|
-
) {
|
|
128
|
-
const request: ApiFetch['request'] = this.requestDefault.request(apiFetch.request)
|
|
129
|
-
const response = this.get(path, method, request, devMode)
|
|
130
|
-
|
|
131
|
-
if (response) {
|
|
132
|
-
const read = (await this.fetch<T>(response, request))
|
|
133
|
-
|
|
134
|
-
if (this.isDevMode(devMode)) {
|
|
135
|
-
console.warn('Response data:', path, request, read)
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return read
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
return undefined
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Checks if the cached item is disabled.
|
|
147
|
-
*
|
|
148
|
-
* Проверяет, отключен ли кешированный элемент.
|
|
149
|
-
* @param item cached item/ кешированный элемент
|
|
150
|
-
*/
|
|
151
|
-
protected isDisable(item: ApiResponseItem): boolean {
|
|
152
|
-
return Boolean(executeFunction(item?.disable))
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Checks if the path matches the cached one.
|
|
157
|
-
*
|
|
158
|
-
* Проверяет, совпадает ли путь с кешированным.
|
|
159
|
-
* @param item cached item/ кешированный элемент
|
|
160
|
-
* @param path request path/ путь запроса
|
|
161
|
-
*/
|
|
162
|
-
protected isPath(
|
|
163
|
-
item: ApiResponseItem,
|
|
164
|
-
path: string
|
|
165
|
-
): boolean {
|
|
166
|
-
return path === item.path
|
|
167
|
-
|| Boolean(
|
|
168
|
-
item.path instanceof RegExp
|
|
169
|
-
&& path.match(item.path)
|
|
170
|
-
)
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Checks if it is developer mode.
|
|
175
|
-
*
|
|
176
|
-
* Проверяет, является ли режимом разработчика.
|
|
177
|
-
* @param devMode is it developer mode/ является ли режим разработчика
|
|
178
|
-
*/
|
|
179
|
-
protected isDevMode(devMode?: boolean): boolean {
|
|
180
|
-
return devMode || this.devMode
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* Checks if this is the first request.
|
|
185
|
-
*
|
|
186
|
-
* Проверяет, является ли это первым запросом.
|
|
187
|
-
* @param item cached item/ кешированный элемент
|
|
188
|
-
* @param devMode is it developer mode/ является ли режим разработчика
|
|
189
|
-
*/
|
|
190
|
-
protected isFirst(
|
|
191
|
-
item: ApiResponseItem,
|
|
192
|
-
devMode?: boolean
|
|
193
|
-
): boolean {
|
|
194
|
-
return this.first.indexOf(item) === -1
|
|
195
|
-
|| this.isDevMode(devMode)
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* Checks if the request matches the cached one.
|
|
200
|
-
*
|
|
201
|
-
* Проверяет, совпадает ли запрос с кешированным.
|
|
202
|
-
* @param item cached item/ кешированный элемент
|
|
203
|
-
* @param request request data/ данные запроса
|
|
204
|
-
*/
|
|
205
|
-
protected isResponse(
|
|
206
|
-
item: ApiResponseItem,
|
|
207
|
-
request?: ApiFetch['request']
|
|
208
|
-
) {
|
|
209
|
-
const requestItem = this.requestDefault.request(item?.request)
|
|
210
|
-
|
|
211
|
-
return request === requestItem
|
|
212
|
-
|| '*any' === requestItem
|
|
213
|
-
|| (
|
|
214
|
-
isFilled(request)
|
|
215
|
-
&& isFilled(requestItem)
|
|
216
|
-
&& isObjectNotArray(request)
|
|
217
|
-
&& isObjectNotArray(requestItem)
|
|
218
|
-
&& !(request instanceof FormData)
|
|
219
|
-
&& !(requestItem instanceof FormData)
|
|
220
|
-
&& Object.values(request).length === Object.values(requestItem).length
|
|
221
|
-
&& Object.entries(requestItem).reduce(
|
|
222
|
-
(accum, [key, value]) => (accum && (value === request?.[key] || value === '*any')),
|
|
223
|
-
true
|
|
224
|
-
)
|
|
225
|
-
)
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* Emulates an execution request.
|
|
230
|
-
*
|
|
231
|
-
* Эмулирует запрос выполнения.
|
|
232
|
-
* @param response Data for pre-request/ Данные для пред-запроса
|
|
233
|
-
* @param request data for the request/ данные для запроса
|
|
234
|
-
*/
|
|
235
|
-
protected fetch<T>(
|
|
236
|
-
response: ApiResponseItem,
|
|
237
|
-
request?: ApiFetch['request']
|
|
238
|
-
): Promise<T> {
|
|
239
|
-
this.startResponseLoading()
|
|
240
|
-
|
|
241
|
-
return new Promise((resolve) => {
|
|
242
|
-
executePromise(
|
|
243
|
-
isFunction(response.response)
|
|
244
|
-
? response.response(request)
|
|
245
|
-
: response.response
|
|
246
|
-
).then((data) => {
|
|
247
|
-
if (response?.lag) {
|
|
248
|
-
Loading.show()
|
|
249
|
-
|
|
250
|
-
setTimeout(() => {
|
|
251
|
-
this.stopResponseLoading()
|
|
252
|
-
|
|
253
|
-
resolve(data)
|
|
254
|
-
Loading.hide()
|
|
255
|
-
}, random(0, 2000))
|
|
256
|
-
} else {
|
|
257
|
-
this.stopResponseLoading()
|
|
258
|
-
resolve(data)
|
|
259
|
-
}
|
|
260
|
-
})
|
|
261
|
-
})
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
/**
|
|
265
|
-
* Enable loading for request emulation.
|
|
266
|
-
*
|
|
267
|
-
* Включить загрузку для эмуляции запроса.
|
|
268
|
-
*/
|
|
269
|
-
protected startResponseLoading() {
|
|
270
|
-
if (this.loading) {
|
|
271
|
-
clearTimeout(this.loading)
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
if (isDomRuntime()) {
|
|
275
|
-
document.body.classList.add(CLASS_RESPONSE_LOADING)
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
/**
|
|
280
|
-
* Disable loading for request emulation.
|
|
281
|
-
*
|
|
282
|
-
* Отключить загрузку для эмуляции запроса.
|
|
283
|
-
*/
|
|
284
|
-
protected stopResponseLoading() {
|
|
285
|
-
this.loading = setTimeout(() => {
|
|
286
|
-
this.loading = undefined
|
|
287
|
-
|
|
288
|
-
if (isDomRuntime()) {
|
|
289
|
-
document.body.classList.remove(CLASS_RESPONSE_LOADING)
|
|
290
|
-
}
|
|
291
|
-
}, 1200)
|
|
292
|
-
}
|
|
293
|
-
}
|
package/src/classes/ApiStatus.ts
DELETED
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
import { isObjectNotArray } from '../functions/isObjectNotArray'
|
|
2
|
-
import type { ApiStatusItem } from '../types/apiTypes'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* API status class
|
|
6
|
-
*
|
|
7
|
-
* Класс статуса API
|
|
8
|
-
*/
|
|
9
|
-
export class ApiStatus {
|
|
10
|
-
protected value?: ApiStatusItem
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Last response data
|
|
14
|
-
*
|
|
15
|
-
* Данные последнего ответа
|
|
16
|
-
*/
|
|
17
|
-
get(): ApiStatusItem {
|
|
18
|
-
return this.value as ApiStatusItem
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Returns the execution status code.
|
|
23
|
-
*
|
|
24
|
-
* Возвращает код статуса выполнения.
|
|
25
|
-
*/
|
|
26
|
-
getStatus(): number | undefined {
|
|
27
|
-
return this.get()?.status
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Returns the execution status text.
|
|
32
|
-
*
|
|
33
|
-
* Возвращает текст статуса выполнения.
|
|
34
|
-
*/
|
|
35
|
-
getStatusText(): string | undefined {
|
|
36
|
-
return this.get()?.statusText
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Returns the script execution error.
|
|
41
|
-
*
|
|
42
|
-
* Возвращает ошибку выполнения скрипта.
|
|
43
|
-
*/
|
|
44
|
-
getError(): string | undefined {
|
|
45
|
-
return this.get()?.error
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Returns the data of the last request.
|
|
50
|
-
*
|
|
51
|
-
* Возвращает данные последнего запроса.
|
|
52
|
-
*/
|
|
53
|
-
getResponse<T>(): T | undefined {
|
|
54
|
-
return this.get()?.lastResponse
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Returns messages from the last request.
|
|
59
|
-
*
|
|
60
|
-
* Возвращает сообщения от последнего запроса.
|
|
61
|
-
*/
|
|
62
|
-
getMessage(): string {
|
|
63
|
-
return this.get()?.lastMessage || ''
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Sets the status item data.
|
|
68
|
-
*
|
|
69
|
-
* Устанавливает данные элемента статуса.
|
|
70
|
-
* @param data status item data/ данные элемента статуса
|
|
71
|
-
*/
|
|
72
|
-
set(data: ApiStatusItem): this {
|
|
73
|
-
if ('status' in data) {
|
|
74
|
-
this.setValue('status', data.status)
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if ('statusText' in data) {
|
|
78
|
-
this.setValue('statusText', data.statusText)
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
if ('error' in data) {
|
|
82
|
-
this.setValue('error', data.error)
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
if ('lastResponse' in data) {
|
|
86
|
-
this.setValue('lastResponse', data.lastResponse)
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
if ('lastMessage' in data) {
|
|
90
|
-
this.setValue('lastMessage', data.lastMessage)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
return this
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Sets the status code and optional status text.
|
|
98
|
-
*
|
|
99
|
-
* Устанавливает код статуса и необязательный текст статуса.
|
|
100
|
-
* @param status status code/ код статуса
|
|
101
|
-
* @param statusText optional status text/ необязательный текст статуса
|
|
102
|
-
*/
|
|
103
|
-
setStatus(
|
|
104
|
-
status?: number,
|
|
105
|
-
statusText?: string
|
|
106
|
-
): this {
|
|
107
|
-
this.set({
|
|
108
|
-
status,
|
|
109
|
-
statusText
|
|
110
|
-
})
|
|
111
|
-
|
|
112
|
-
return this
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Sets the error message.
|
|
117
|
-
*
|
|
118
|
-
* Устанавливает сообщение об ошибке.
|
|
119
|
-
* @param error error message/ сообщение об ошибке
|
|
120
|
-
*/
|
|
121
|
-
setError(error?: string): this {
|
|
122
|
-
this.set({ error })
|
|
123
|
-
return this
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Sets the data of the last response.
|
|
128
|
-
*
|
|
129
|
-
* Устанавливает данные последнего ответа.
|
|
130
|
-
* @param response response data/ данные ответа
|
|
131
|
-
*/
|
|
132
|
-
setLastResponse(response?: any): this {
|
|
133
|
-
if (
|
|
134
|
-
response
|
|
135
|
-
&& isObjectNotArray(response)
|
|
136
|
-
&& ('message' in response)
|
|
137
|
-
) {
|
|
138
|
-
this.setLastMessage(String(response.message))
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
this.set({ lastResponse: response })
|
|
142
|
-
return this
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Sets messages from the last request.
|
|
147
|
-
*
|
|
148
|
-
* Устанавливает сообщения от последнего запроса.
|
|
149
|
-
* @param message message text/ текст сообщения
|
|
150
|
-
*/
|
|
151
|
-
setLastMessage(message?: string): this {
|
|
152
|
-
this.set({ lastMessage: message })
|
|
153
|
-
return this
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Sets a specific field in the status item.
|
|
158
|
-
*
|
|
159
|
-
* Устанавливает конкретное поле в элементе статуса.
|
|
160
|
-
* @param name field name/ название поля
|
|
161
|
-
* @param value field value/ значение поля
|
|
162
|
-
*/
|
|
163
|
-
protected setValue<K extends keyof ApiStatusItem>(
|
|
164
|
-
name: K,
|
|
165
|
-
value?: ApiStatusItem[K]
|
|
166
|
-
) {
|
|
167
|
-
if (!this.value) {
|
|
168
|
-
this.value = {} as ApiStatusItem
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
(this.value as ApiStatusItem)[name] = value
|
|
172
|
-
}
|
|
173
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { isDomRuntime } from '../functions/isDomRuntime'
|
|
2
|
-
import { random } from '../functions/random'
|
|
3
|
-
|
|
4
|
-
import { DataStorage } from './DataStorage'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* A class to handle BroadcastChannel messaging.
|
|
8
|
-
*
|
|
9
|
-
* Класс для работы с сообщениями BroadcastChannel.
|
|
10
|
-
*/
|
|
11
|
-
export class BroadcastMessage<Message = any> {
|
|
12
|
-
protected channel?: BroadcastChannel
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Constructor
|
|
16
|
-
* @param name channel name/ название канала
|
|
17
|
-
* @param callback callback on message received/ колбэк на получение сообщения
|
|
18
|
-
*/
|
|
19
|
-
constructor(
|
|
20
|
-
name: string,
|
|
21
|
-
protected callback?: (event: MessageEvent<Message>) => void
|
|
22
|
-
) {
|
|
23
|
-
if (isDomRuntime()) {
|
|
24
|
-
try {
|
|
25
|
-
this.channel = new BroadcastChannel(`${getBroadcastName()}__${name}`)
|
|
26
|
-
this.channel.onmessage = this.update
|
|
27
|
-
} catch (e) {
|
|
28
|
-
console.error(`BroadcastMessage ${name}:`, e)
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Send a message to the channel.
|
|
35
|
-
*
|
|
36
|
-
* Отправить сообщение в канал.
|
|
37
|
-
* @param message message to send/ сообщение для отправки
|
|
38
|
-
*/
|
|
39
|
-
post(message: Message): this {
|
|
40
|
-
this.channel?.postMessage(message)
|
|
41
|
-
return this
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Set the callback function to be called when a message is received.
|
|
46
|
-
*
|
|
47
|
-
* Установить функцию колбэка, которая будет вызвана при получении сообщения.
|
|
48
|
-
* @param callback callback function/ функция колбэка
|
|
49
|
-
*/
|
|
50
|
-
setCallback(callback: (event: MessageEvent<Message>) => void): this {
|
|
51
|
-
this.callback = callback
|
|
52
|
-
return this
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Update state on message received.
|
|
57
|
-
*
|
|
58
|
-
* Обновление состояния при получении сообщения.
|
|
59
|
-
* @param event message event/ событие сообщения
|
|
60
|
-
*/
|
|
61
|
-
protected readonly update = (event: MessageEvent<Message>): this => {
|
|
62
|
-
this.callback?.(event)
|
|
63
|
-
return this
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Generates a random name and saves it in local storage.
|
|
69
|
-
*
|
|
70
|
-
* Генерирует случайное имя и сохраняет его в локальном хранилище.
|
|
71
|
-
*/
|
|
72
|
-
const getBroadcastName = () => new DataStorage('__broadcast-name')
|
|
73
|
-
.get(() => `name_${random(1_000_000, 9_999_999)}`)
|
package/src/classes/Cache.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { CacheItem } from './CacheItem'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Simple class for caching.
|
|
5
|
-
*
|
|
6
|
-
* Простой класс для кэширования.
|
|
7
|
-
*/
|
|
8
|
-
export class Cache {
|
|
9
|
-
private cache: Record<string, CacheItem<any>> = {}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Getting data for the cache, and if there is no cache, it performs a function to save the cache.
|
|
13
|
-
*
|
|
14
|
-
* Получение данных для кэша, и если нет кэша, выполняет функцию для сохранения кэша.
|
|
15
|
-
* @param name cache name/ название кэша
|
|
16
|
-
* @param callback function for the cache/ функция для кэша
|
|
17
|
-
* @param comparison additional data for comparison/ дополнительные данные для сравнения
|
|
18
|
-
*/
|
|
19
|
-
get<T>(
|
|
20
|
-
name: string,
|
|
21
|
-
callback: () => T,
|
|
22
|
-
comparison?: any[]
|
|
23
|
-
): T {
|
|
24
|
-
return this.getCacheItem(name, callback).getCache(comparison ?? [])
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Getting data for the cache, and if there is no cache, it performs a function to save the cache (Async).
|
|
29
|
-
*
|
|
30
|
-
* Получение данных для кэша, и если нет кэша, выполняет функцию для сохранения кэша (Async).
|
|
31
|
-
* @param name cache name/ название кэша
|
|
32
|
-
* @param callback function for the cache/ функция для кэша
|
|
33
|
-
* @param comparison additional data for comparison/ дополнительные данные для сравнения
|
|
34
|
-
*/
|
|
35
|
-
async getAsync<T>(
|
|
36
|
-
name: string,
|
|
37
|
-
callback: () => T,
|
|
38
|
-
comparison?: any[]
|
|
39
|
-
): Promise<T> {
|
|
40
|
-
return await this.getCacheItem(name, callback).getCacheAsync(comparison ?? [])
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Returns an instance of the object for working with the cache element.
|
|
45
|
-
*
|
|
46
|
-
* Возвращает экземпляр объекта для работы с элементом кэша.
|
|
47
|
-
* @param name cache name/ название кэша
|
|
48
|
-
* @param callback function for the cache/ функция для кэша
|
|
49
|
-
*/
|
|
50
|
-
private getCacheItem<T>(
|
|
51
|
-
name: string,
|
|
52
|
-
callback: () => T
|
|
53
|
-
): CacheItem<T> {
|
|
54
|
-
if (!(name in this.cache)) {
|
|
55
|
-
this.cache[name] = new CacheItem(callback)
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return this.cache[name] as CacheItem<T>
|
|
59
|
-
}
|
|
60
|
-
}
|
package/src/classes/CacheItem.ts
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Class for managing a single caching value.
|
|
3
|
-
*
|
|
4
|
-
* Класс для управления одним значением кэширования.
|
|
5
|
-
*/
|
|
6
|
-
export class CacheItem<T> {
|
|
7
|
-
private cache?: T
|
|
8
|
-
private cacheOld?: T
|
|
9
|
-
private comparisons: any[] = []
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Constructor
|
|
13
|
-
* @param callback function for the cache/ функция для кэша
|
|
14
|
-
*/
|
|
15
|
-
constructor(
|
|
16
|
-
private readonly callback: () => T
|
|
17
|
-
) {
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Getting data for the cache, and if there is no cache, it performs a function to save the cache.
|
|
22
|
-
*
|
|
23
|
-
* Получение данных для кэша, и если нет кэша, выполняет функцию для сохранения кэша.
|
|
24
|
-
* @param comparison additional data for comparison/ дополнительные данные для сравнения
|
|
25
|
-
*/
|
|
26
|
-
getCache(comparison: any[]): T {
|
|
27
|
-
if (this.isUpdate(comparison)) {
|
|
28
|
-
this.cacheOld = this.cache
|
|
29
|
-
this.setCache()
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return this.cache as T
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Getting the previous value of the cache.
|
|
37
|
-
*
|
|
38
|
-
* Получение предыдущего значения кэша.
|
|
39
|
-
*/
|
|
40
|
-
getCacheOld(): T | undefined {
|
|
41
|
-
return this.cacheOld
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Getting data for the cache, and if there is no cache, it performs a function to save the cache (Async).
|
|
46
|
-
*
|
|
47
|
-
* Получение данных для кэша, и если нет кэша, выполняет функцию для сохранения кэша (Async).
|
|
48
|
-
* @param comparison additional data for comparison/ дополнительные данные для сравнения
|
|
49
|
-
*/
|
|
50
|
-
async getCacheAsync(comparison: any[]): Promise<T> {
|
|
51
|
-
if (this.isUpdate(comparison)) {
|
|
52
|
-
this.cacheOld = this.cache
|
|
53
|
-
await this.setCacheAsync()
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return this.cache as T
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Overwrites or adds new values for the cache.
|
|
61
|
-
*
|
|
62
|
-
* Перезаписывает или добавляет новые значения для кэша.
|
|
63
|
-
*/
|
|
64
|
-
private setCache(): void {
|
|
65
|
-
this.cache = this.callback()
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Overwrites or adds new values for the cache (Async).
|
|
70
|
-
*
|
|
71
|
-
* Перезаписывает или добавляет новые значения для кэша (Async).
|
|
72
|
-
*/
|
|
73
|
-
private async setCacheAsync(): Promise<void> {
|
|
74
|
-
this.cache = await this.callback()
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Checking additional data.
|
|
79
|
-
*
|
|
80
|
-
* Проверка дополнительных данных.
|
|
81
|
-
* @param comparison additional data for comparison/ дополнительные данные для сравнения
|
|
82
|
-
*/
|
|
83
|
-
private isUpdate(comparison: any[]): boolean {
|
|
84
|
-
if (
|
|
85
|
-
this.cache === undefined
|
|
86
|
-
|| this.comparisons.length !== comparison.length
|
|
87
|
-
|| this.comparisons.findIndex((value, index) => value !== comparison[index]) >= 0
|
|
88
|
-
) {
|
|
89
|
-
this.comparisons = [...comparison]
|
|
90
|
-
return true
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
return false
|
|
94
|
-
}
|
|
95
|
-
}
|