@dxtmisha/functional-basic 0.1.1 → 0.1.4

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.
Files changed (125) hide show
  1. package/dist/functions/copyObjectLite.d.ts +9 -0
  2. package/dist/library.d.ts +1 -0
  3. package/dist/library.js +405 -411
  4. package/package.json +1 -3
  5. package/src/classes/Api.ts +0 -407
  6. package/src/classes/ApiDefault.ts +0 -83
  7. package/src/classes/ApiHeaders.ts +0 -52
  8. package/src/classes/ApiPreparation.ts +0 -114
  9. package/src/classes/ApiResponse.ts +0 -293
  10. package/src/classes/ApiStatus.ts +0 -173
  11. package/src/classes/BroadcastMessage.ts +0 -73
  12. package/src/classes/Cache.ts +0 -60
  13. package/src/classes/CacheItem.ts +0 -95
  14. package/src/classes/CacheStatic.ts +0 -30
  15. package/src/classes/Cookie.ts +0 -135
  16. package/src/classes/CookieBlock.ts +0 -31
  17. package/src/classes/DataStorage.ts +0 -194
  18. package/src/classes/Datetime.ts +0 -891
  19. package/src/classes/EventItem.ts +0 -373
  20. package/src/classes/Geo.ts +0 -320
  21. package/src/classes/GeoFlag.ts +0 -386
  22. package/src/classes/GeoIntl.ts +0 -839
  23. package/src/classes/GeoPhone.ts +0 -272
  24. package/src/classes/Global.ts +0 -32
  25. package/src/classes/Hash.ts +0 -142
  26. package/src/classes/Icons.ts +0 -165
  27. package/src/classes/Loading.ts +0 -90
  28. package/src/classes/Meta.ts +0 -284
  29. package/src/classes/MetaManager.ts +0 -200
  30. package/src/classes/MetaOg.ts +0 -147
  31. package/src/classes/MetaTwitter.ts +0 -154
  32. package/src/classes/ScrollbarWidth.ts +0 -86
  33. package/src/classes/Translate.ts +0 -293
  34. package/src/classes/__tests__/Api.test.ts +0 -728
  35. package/src/classes/__tests__/ApiDefault.test.ts +0 -222
  36. package/src/classes/__tests__/ApiHeaders.test.ts +0 -447
  37. package/src/classes/__tests__/ApiPreparation.test.ts +0 -257
  38. package/src/classes/__tests__/ApiResponse.test.ts +0 -547
  39. package/src/classes/__tests__/ApiStatus.test.ts +0 -403
  40. package/src/classes/__tests__/Meta.test.ts +0 -629
  41. package/src/classes/__tests__/MetaManager.test.ts +0 -836
  42. package/src/classes/__tests__/MetaOg.test.ts +0 -677
  43. package/src/classes/__tests__/MetaTwitter.test.ts +0 -423
  44. package/src/functions/anyToString.ts +0 -36
  45. package/src/functions/applyTemplate.ts +0 -63
  46. package/src/functions/arrFill.ts +0 -10
  47. package/src/functions/copyObject.ts +0 -10
  48. package/src/functions/createElement.ts +0 -40
  49. package/src/functions/domQuerySelector.ts +0 -15
  50. package/src/functions/domQuerySelectorAll.ts +0 -15
  51. package/src/functions/encodeAttribute.ts +0 -15
  52. package/src/functions/eventStopPropagation.ts +0 -10
  53. package/src/functions/executeFunction.ts +0 -13
  54. package/src/functions/executePromise.ts +0 -19
  55. package/src/functions/forEach.ts +0 -39
  56. package/src/functions/frame.ts +0 -38
  57. package/src/functions/getAttributes.ts +0 -27
  58. package/src/functions/getClipboardData.ts +0 -13
  59. package/src/functions/getColumn.ts +0 -18
  60. package/src/functions/getElement.ts +0 -35
  61. package/src/functions/getElementId.ts +0 -39
  62. package/src/functions/getElementItem.ts +0 -27
  63. package/src/functions/getElementOrWindow.ts +0 -23
  64. package/src/functions/getExp.ts +0 -21
  65. package/src/functions/getItemByPath.ts +0 -24
  66. package/src/functions/getKey.ts +0 -9
  67. package/src/functions/getLengthOfAllArray.ts +0 -13
  68. package/src/functions/getMaxLengthAllArray.ts +0 -13
  69. package/src/functions/getMinLengthAllArray.ts +0 -13
  70. package/src/functions/getMouseClient.ts +0 -17
  71. package/src/functions/getMouseClientX.ts +0 -9
  72. package/src/functions/getMouseClientY.ts +0 -9
  73. package/src/functions/getObjectByKeys.ts +0 -24
  74. package/src/functions/getObjectNoUndefined.ts +0 -23
  75. package/src/functions/getObjectOrNone.ts +0 -11
  76. package/src/functions/getRandomText.ts +0 -29
  77. package/src/functions/getRequestString.ts +0 -21
  78. package/src/functions/getStepPercent.ts +0 -19
  79. package/src/functions/getStepValue.ts +0 -19
  80. package/src/functions/goScroll.ts +0 -40
  81. package/src/functions/inArray.ts +0 -10
  82. package/src/functions/initScrollbarOffset.ts +0 -14
  83. package/src/functions/intersectKey.ts +0 -34
  84. package/src/functions/isArray.ts +0 -9
  85. package/src/functions/isDifferent.ts +0 -27
  86. package/src/functions/isDomRuntime.ts +0 -12
  87. package/src/functions/isFilled.ts +0 -49
  88. package/src/functions/isFloat.ts +0 -16
  89. package/src/functions/isFunction.ts +0 -11
  90. package/src/functions/isInDom.ts +0 -15
  91. package/src/functions/isIntegerBetween.ts +0 -11
  92. package/src/functions/isNull.ts +0 -11
  93. package/src/functions/isNumber.ts +0 -16
  94. package/src/functions/isObject.ts +0 -9
  95. package/src/functions/isObjectNotArray.ts +0 -11
  96. package/src/functions/isSelected.ts +0 -32
  97. package/src/functions/isSelectedByList.ts +0 -19
  98. package/src/functions/isString.ts +0 -9
  99. package/src/functions/isWindow.ts +0 -11
  100. package/src/functions/random.ts +0 -10
  101. package/src/functions/replaceRecursive.ts +0 -60
  102. package/src/functions/replaceTemplate.ts +0 -22
  103. package/src/functions/secondToTime.ts +0 -20
  104. package/src/functions/setElementItem.ts +0 -56
  105. package/src/functions/setValues.ts +0 -59
  106. package/src/functions/splice.ts +0 -59
  107. package/src/functions/strFill.ts +0 -12
  108. package/src/functions/toArray.ts +0 -19
  109. package/src/functions/toCamelCase.ts +0 -16
  110. package/src/functions/toCamelCaseFirst.ts +0 -12
  111. package/src/functions/toDate.ts +0 -44
  112. package/src/functions/toKebabCase.ts +0 -25
  113. package/src/functions/toNumber.ts +0 -35
  114. package/src/functions/toNumberByMax.ts +0 -33
  115. package/src/functions/toPercent.ts +0 -10
  116. package/src/functions/toPercentBy100.ts +0 -12
  117. package/src/functions/transformation.ts +0 -59
  118. package/src/functions/uniqueArray.ts +0 -9
  119. package/src/functions/writeClipboardData.ts +0 -17
  120. package/src/library.ts +0 -116
  121. package/src/types/apiTypes.ts +0 -143
  122. package/src/types/basicTypes.ts +0 -155
  123. package/src/types/geoTypes.ts +0 -109
  124. package/src/types/metaTypes.ts +0 -764
  125. 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
- }
@@ -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)}`)
@@ -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
- }
@@ -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
- }