@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,423 +0,0 @@
1
- /**
2
- * @vitest-environment jsdom
3
- */
4
-
5
- import { describe, it, expect, beforeEach, afterEach } from 'vitest'
6
- import { MetaTwitter } from '../MetaTwitter'
7
- import { MetaTwitterCard } from '../../types/metaTypes'
8
-
9
- describe('MetaTwitter', () => {
10
- let metaTwitter: MetaTwitter
11
-
12
- beforeEach(() => {
13
- // Очистка DOM перед каждым тестом
14
- document.head.innerHTML = ''
15
-
16
- metaTwitter = new MetaTwitter()
17
- })
18
-
19
- afterEach(() => {
20
- // Очистка после тестов
21
- document.head.innerHTML = ''
22
- })
23
-
24
- describe('constructor', () => {
25
- it('should create MetaTwitter instance', () => {
26
- expect(metaTwitter).toBeInstanceOf(MetaTwitter)
27
- })
28
-
29
- it('should initialize with all Twitter Card tags', () => {
30
- const listMeta = metaTwitter.getListMeta()
31
-
32
- expect(listMeta).toContain('twitter:card')
33
- expect(listMeta).toContain('twitter:site')
34
- expect(listMeta).toContain('twitter:creator')
35
- expect(listMeta).toContain('twitter:url')
36
- expect(listMeta).toContain('twitter:title')
37
- expect(listMeta).toContain('twitter:description')
38
- expect(listMeta).toContain('twitter:image')
39
- })
40
-
41
- it('should read existing Twitter tags from DOM on initialization', () => {
42
- // Создаем Twitter теги в DOM
43
- const titleMeta = document.createElement('meta')
44
- titleMeta.setAttribute('name', 'twitter:title')
45
- titleMeta.setAttribute('content', 'Existing Twitter Title')
46
- document.head.appendChild(titleMeta)
47
-
48
- const descMeta = document.createElement('meta')
49
- descMeta.setAttribute('name', 'twitter:description')
50
- descMeta.setAttribute('content', 'Existing Twitter Description')
51
- document.head.appendChild(descMeta)
52
-
53
- // Создаем новый экземпляр
54
- const newMetaTwitter = new MetaTwitter()
55
-
56
- // Должен прочитать существующие теги
57
- expect(newMetaTwitter.getTitle()).toBe('Existing Twitter Title')
58
- expect(newMetaTwitter.getDescription()).toBe('Existing Twitter Description')
59
- })
60
- })
61
-
62
- describe('getCard', () => {
63
- it('should return empty string when card not set', () => {
64
- expect(metaTwitter.getCard()).toBe('')
65
- })
66
-
67
- it('should return card type after setting', () => {
68
- metaTwitter.setCard(MetaTwitterCard.summaryLargeImage)
69
- expect(metaTwitter.getCard()).toBe(MetaTwitterCard.summaryLargeImage)
70
- })
71
- })
72
-
73
- describe('getSite', () => {
74
- it('should return empty string when site not set', () => {
75
- expect(metaTwitter.getSite()).toBe('')
76
- })
77
-
78
- it('should return site after setting', () => {
79
- metaTwitter.setSite('@mywebsite')
80
- expect(metaTwitter.getSite()).toBe('@mywebsite')
81
- })
82
- })
83
-
84
- describe('getCreator', () => {
85
- it('should return empty string when creator not set', () => {
86
- expect(metaTwitter.getCreator()).toBe('')
87
- })
88
-
89
- it('should return creator after setting', () => {
90
- metaTwitter.setCreator('@author')
91
- expect(metaTwitter.getCreator()).toBe('@author')
92
- })
93
- })
94
-
95
- describe('getUrl', () => {
96
- it('should return empty string when URL not set', () => {
97
- expect(metaTwitter.getUrl()).toBe('')
98
- })
99
-
100
- it('should return URL after setting', () => {
101
- metaTwitter.setUrl('https://example.com/page')
102
- expect(metaTwitter.getUrl()).toBe('https://example.com/page')
103
- })
104
- })
105
-
106
- describe('getTitle', () => {
107
- it('should return empty string when title not set', () => {
108
- expect(metaTwitter.getTitle()).toBe('')
109
- })
110
-
111
- it('should return title after setting', () => {
112
- metaTwitter.setTitle('Twitter Card Title')
113
- expect(metaTwitter.getTitle()).toBe('Twitter Card Title')
114
- })
115
- })
116
-
117
- describe('getDescription', () => {
118
- it('should return empty string when description not set', () => {
119
- expect(metaTwitter.getDescription()).toBe('')
120
- })
121
-
122
- it('should return description after setting', () => {
123
- metaTwitter.setDescription('Twitter Card Description')
124
- expect(metaTwitter.getDescription()).toBe('Twitter Card Description')
125
- })
126
- })
127
-
128
- describe('getImage', () => {
129
- it('should return empty string when image not set', () => {
130
- expect(metaTwitter.getImage()).toBe('')
131
- })
132
-
133
- it('should return image URL after setting', () => {
134
- metaTwitter.setImage('https://example.com/twitter-image.jpg')
135
- expect(metaTwitter.getImage()).toBe('https://example.com/twitter-image.jpg')
136
- })
137
- })
138
-
139
- describe('setCard', () => {
140
- it('should set Twitter card type', () => {
141
- metaTwitter.setCard(MetaTwitterCard.summary)
142
- expect(metaTwitter.getCard()).toBe(MetaTwitterCard.summary)
143
- })
144
-
145
- it('should create meta tag in DOM', () => {
146
- metaTwitter.setCard(MetaTwitterCard.summaryLargeImage)
147
-
148
- const element = document.querySelector('meta[name="twitter:card"]')
149
- expect(element).toBeTruthy()
150
- expect(element?.getAttribute('content')).toBe('summary_large_image')
151
- })
152
-
153
- it('should handle all Twitter Card types', () => {
154
- const types = [
155
- MetaTwitterCard.summary,
156
- MetaTwitterCard.summaryLargeImage,
157
- MetaTwitterCard.app,
158
- MetaTwitterCard.player
159
- ]
160
-
161
- types.forEach((type) => {
162
- metaTwitter.setCard(type)
163
- expect(metaTwitter.getCard()).toBe(type)
164
- })
165
- })
166
-
167
- it('should return this for chaining', () => {
168
- const result = metaTwitter.setCard(MetaTwitterCard.summary)
169
- expect(result).toBe(metaTwitter)
170
- })
171
- })
172
-
173
- describe('setSite', () => {
174
- it('should set Twitter site username', () => {
175
- metaTwitter.setSite('@mysite')
176
- expect(metaTwitter.getSite()).toBe('@mysite')
177
- })
178
-
179
- it('should create meta tag in DOM', () => {
180
- metaTwitter.setSite('@example')
181
-
182
- const element = document.querySelector('meta[name="twitter:site"]')
183
- expect(element).toBeTruthy()
184
- expect(element?.getAttribute('content')).toBe('@example')
185
- })
186
-
187
- it('should update existing meta tag', () => {
188
- metaTwitter.setSite('@first')
189
- metaTwitter.setSite('@second')
190
-
191
- const elements = document.querySelectorAll('meta[name="twitter:site"]')
192
- expect(elements.length).toBe(1)
193
- expect(elements?.[0]?.getAttribute('content')).toBe('@second')
194
- })
195
-
196
- it('should return this for chaining', () => {
197
- const result = metaTwitter.setSite('@test')
198
- expect(result).toBe(metaTwitter)
199
- })
200
- })
201
-
202
- describe('setCreator', () => {
203
- it('should set Twitter creator username', () => {
204
- metaTwitter.setCreator('@creator')
205
- expect(metaTwitter.getCreator()).toBe('@creator')
206
- })
207
-
208
- it('should create meta tag in DOM', () => {
209
- metaTwitter.setCreator('@author')
210
-
211
- const element = document.querySelector('meta[name="twitter:creator"]')
212
- expect(element).toBeTruthy()
213
- expect(element?.getAttribute('content')).toBe('@author')
214
- })
215
-
216
- it('should handle usernames with and without @', () => {
217
- metaTwitter.setCreator('username')
218
- expect(metaTwitter.getCreator()).toBe('username')
219
-
220
- metaTwitter.setCreator('@username')
221
- expect(metaTwitter.getCreator()).toBe('@username')
222
- })
223
-
224
- it('should return this for chaining', () => {
225
- const result = metaTwitter.setCreator('@test')
226
- expect(result).toBe(metaTwitter)
227
- })
228
- })
229
-
230
- describe('setUrl', () => {
231
- it('should set Twitter card URL', () => {
232
- metaTwitter.setUrl('https://example.com/article')
233
- expect(metaTwitter.getUrl()).toBe('https://example.com/article')
234
- })
235
-
236
- it('should create meta tag in DOM', () => {
237
- metaTwitter.setUrl('https://example.com/page')
238
-
239
- const element = document.querySelector('meta[name="twitter:url"]')
240
- expect(element).toBeTruthy()
241
- expect(element?.getAttribute('content')).toBe('https://example.com/page')
242
- })
243
-
244
- it('should handle URLs with query parameters', () => {
245
- const url = 'https://example.com/page?param=value&other=test'
246
- metaTwitter.setUrl(url)
247
- expect(metaTwitter.getUrl()).toBe(url)
248
- })
249
-
250
- it('should return this for chaining', () => {
251
- const result = metaTwitter.setUrl('https://example.com')
252
- expect(result).toBe(metaTwitter)
253
- })
254
- })
255
-
256
- describe('setTitle', () => {
257
- it('should set Twitter card title', () => {
258
- metaTwitter.setTitle('Test Twitter Title')
259
- expect(metaTwitter.getTitle()).toBe('Test Twitter Title')
260
- })
261
-
262
- it('should create meta tag in DOM', () => {
263
- metaTwitter.setTitle('DOM Title Test')
264
-
265
- const element = document.querySelector('meta[name="twitter:title"]')
266
- expect(element).toBeTruthy()
267
- expect(element?.getAttribute('content')).toBe('DOM Title Test')
268
- })
269
-
270
- it('should update existing meta tag', () => {
271
- metaTwitter.setTitle('First Title')
272
- metaTwitter.setTitle('Second Title')
273
-
274
- const elements = document.querySelectorAll('meta[name="twitter:title"]')
275
- expect(elements.length).toBe(1)
276
- expect(elements?.[0]?.getAttribute('content')).toBe('Second Title')
277
- })
278
-
279
- it('should handle empty string', () => {
280
- metaTwitter.setTitle('')
281
- expect(metaTwitter.getTitle()).toBe('')
282
- })
283
-
284
- it('should handle special characters', () => {
285
- metaTwitter.setTitle('Title with "quotes" & <tags>')
286
- expect(metaTwitter.getTitle()).toBe('Title with "quotes" & <tags>')
287
- })
288
-
289
- it('should return this for chaining', () => {
290
- const result = metaTwitter.setTitle('Chain Test')
291
- expect(result).toBe(metaTwitter)
292
- })
293
- })
294
-
295
- describe('setDescription', () => {
296
- it('should set Twitter card description', () => {
297
- metaTwitter.setDescription('Test Twitter Description')
298
- expect(metaTwitter.getDescription()).toBe('Test Twitter Description')
299
- })
300
-
301
- it('should create meta tag in DOM', () => {
302
- metaTwitter.setDescription('DOM Description Test')
303
-
304
- const element = document.querySelector('meta[name="twitter:description"]')
305
- expect(element).toBeTruthy()
306
- expect(element?.getAttribute('content')).toBe('DOM Description Test')
307
- })
308
-
309
- it('should update existing meta tag', () => {
310
- metaTwitter.setDescription('First Description')
311
- metaTwitter.setDescription('Second Description')
312
-
313
- const elements = document.querySelectorAll('meta[name="twitter:description"]')
314
- expect(elements.length).toBe(1)
315
- expect(elements?.[0]?.getAttribute('content')).toBe('Second Description')
316
- })
317
-
318
- it('should handle long descriptions', () => {
319
- const longDesc = 'A'.repeat(200)
320
- metaTwitter.setDescription(longDesc)
321
- expect(metaTwitter.getDescription()).toBe(longDesc)
322
- })
323
-
324
- it('should return this for chaining', () => {
325
- const result = metaTwitter.setDescription('Chain Test')
326
- expect(result).toBe(metaTwitter)
327
- })
328
- })
329
-
330
- describe('setImage', () => {
331
- it('should set Twitter card image URL', () => {
332
- metaTwitter.setImage('https://example.com/twitter-image.jpg')
333
- expect(metaTwitter.getImage()).toBe('https://example.com/twitter-image.jpg')
334
- })
335
-
336
- it('should create meta tag in DOM', () => {
337
- metaTwitter.setImage('https://example.com/twitter-card.png')
338
-
339
- const element = document.querySelector('meta[name="twitter:image"]')
340
- expect(element).toBeTruthy()
341
- expect(element?.getAttribute('content')).toBe('https://example.com/twitter-card.png')
342
- })
343
-
344
- it('should handle different image formats', () => {
345
- const formats = [
346
- 'https://example.com/image.jpg',
347
- 'https://example.com/image.png',
348
- 'https://example.com/image.webp',
349
- 'https://example.com/image.gif'
350
- ]
351
-
352
- formats.forEach((format) => {
353
- metaTwitter.setImage(format)
354
- expect(metaTwitter.getImage()).toBe(format)
355
- })
356
- })
357
-
358
- it('should return this for chaining', () => {
359
- const result = metaTwitter.setImage('https://example.com/img.jpg')
360
- expect(result).toBe(metaTwitter)
361
- })
362
- })
363
-
364
- describe('method chaining', () => {
365
- it('should allow chaining multiple setter methods', () => {
366
- const result = metaTwitter
367
- .setCard(MetaTwitterCard.summaryLargeImage)
368
- .setSite('@mysite')
369
- .setCreator('@author')
370
- .setUrl('https://example.com/article')
371
- .setTitle('Chained Title')
372
- .setDescription('Chained Description')
373
- .setImage('https://example.com/image.jpg')
374
-
375
- expect(result).toBe(metaTwitter)
376
- expect(metaTwitter.getCard()).toBe(MetaTwitterCard.summaryLargeImage)
377
- expect(metaTwitter.getSite()).toBe('@mysite')
378
- expect(metaTwitter.getCreator()).toBe('@author')
379
- expect(metaTwitter.getUrl()).toBe('https://example.com/article')
380
- expect(metaTwitter.getTitle()).toBe('Chained Title')
381
- expect(metaTwitter.getDescription()).toBe('Chained Description')
382
- expect(metaTwitter.getImage()).toBe('https://example.com/image.jpg')
383
- })
384
-
385
- it('should create all meta tags in DOM when chaining', () => {
386
- metaTwitter
387
- .setCard(MetaTwitterCard.summary)
388
- .setSite('@site')
389
- .setTitle('Title')
390
- .setDescription('Description')
391
-
392
- expect(document.querySelector('meta[name="twitter:card"]')).toBeTruthy()
393
- expect(document.querySelector('meta[name="twitter:site"]')).toBeTruthy()
394
- expect(document.querySelector('meta[name="twitter:title"]')).toBeTruthy()
395
- expect(document.querySelector('meta[name="twitter:description"]')).toBeTruthy()
396
- })
397
- })
398
-
399
- describe('integration with DOM', () => {
400
- it('should properly manage meta tags in document head', () => {
401
- metaTwitter.setTitle('Test Title')
402
- metaTwitter.setDescription('Test Description')
403
- metaTwitter.setImage('https://example.com/image.jpg')
404
-
405
- const titleElement = document.querySelector('meta[name="twitter:title"]')
406
- const descElement = document.querySelector('meta[name="twitter:description"]')
407
- const imageElement = document.querySelector('meta[name="twitter:image"]')
408
-
409
- expect(titleElement?.parentElement).toBe(document.head)
410
- expect(descElement?.parentElement).toBe(document.head)
411
- expect(imageElement?.parentElement).toBe(document.head)
412
- })
413
-
414
- it('should not duplicate meta tags on multiple updates', () => {
415
- metaTwitter.setTitle('First')
416
- metaTwitter.setTitle('Second')
417
- metaTwitter.setTitle('Third')
418
-
419
- const elements = document.querySelectorAll('meta[name="twitter:title"]')
420
- expect(elements.length).toBe(1)
421
- })
422
- })
423
- })
@@ -1,36 +0,0 @@
1
- import { isArray } from './isArray'
2
- import { isObject } from './isObject'
3
- import { isString } from './isString'
4
-
5
- /**
6
- * Conversion of a value to a string.
7
- *
8
- * Преобразование значения в строку.
9
- * @param value values for conversion/ значения для преобразования
10
- */
11
- export function anyToString<V>(value: V): string {
12
- if (isString(value)) {
13
- return value.trim()
14
- }
15
-
16
- if (
17
- isArray(value)
18
- && value.findIndex(item => isObject(item)) === -1
19
- ) {
20
- return value.join(',')
21
- }
22
-
23
- if (isObject(value)) {
24
- return JSON.stringify(value)
25
- }
26
-
27
- if (value === true) {
28
- return '1'
29
- }
30
-
31
- if (value === false) {
32
- return '0'
33
- }
34
-
35
- return value?.toString() ?? ''
36
- }
@@ -1,63 +0,0 @@
1
- import { forEach } from './forEach'
2
- import { isObjectNotArray } from './isObjectNotArray'
3
-
4
- const LIST_NAME = [
5
- 'd',
6
- 'e',
7
- 'f',
8
- 'g',
9
- 'h',
10
- 'i',
11
- 'j',
12
- 'k',
13
- 'l',
14
- 'm',
15
- 'n',
16
- 'o',
17
- 'p',
18
- 'q',
19
- 'r',
20
- 's',
21
- 't',
22
- 'u',
23
- 'v'
24
- ]
25
-
26
- /**
27
- * Applies a template to the text, replacing keys with values from the replacement object
28
- *
29
- * Применяет шаблон к тексту, заменяя ключи на значения из объекта замены
30
- * @param text text with a template containing keys in square brackets, for example "[key]"/
31
- * текст с шаблоном, содержащим ключи в квадратных скобках, например "[key]"
32
- * @param replacement an object containing key-value pairs for replacement/
33
- * объект, содержащий пары ключ-значение для замены
34
- */
35
- export const applyTemplate = (
36
- text: string,
37
- replacement: Record<string, string | number> | string[] = {}
38
- ) => {
39
- let content = String(text)
40
-
41
- if (text.match(/%[a-z]/)) {
42
- let code = 0
43
-
44
- forEach(replacement, (value) => {
45
- content = content.replace(new RegExp(`%${LIST_NAME[code++]}`, 'g'), String(value))
46
- })
47
- }
48
-
49
- if (isObjectNotArray(replacement)) {
50
- forEach(replacement, (value, key) => {
51
- content = content
52
- .replace(
53
- new RegExp(`\\[${key}\\](.*?)\\[/${key}\\]`, 'g'),
54
- (_: string, content: string) => {
55
- return String(value).replace(/\[content]/g, content)
56
- }
57
- )
58
- .replace(new RegExp(`\\[${key}\\]`, 'g'), String(value))
59
- })
60
- }
61
-
62
- return content
63
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * The method creates an array of "count" elements with values equal to `value`.
3
- *
4
- * Метод создает массив из "count" элементов со значениями равными `value`.
5
- * @param value value to fill the array with/ значение, заполняющее массив
6
- * @param count the number of elements in that array/ число элементов этого массива
7
- */
8
- export function arrFill<T>(value: T, count: number): T[] {
9
- return Array(count).fill(value) as T[]
10
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * Создает копию простого объекта.
3
- *
4
- * Creates a copy of a simple object.
5
- * @param value объект для копирования/ object for copying
6
- * @returns возвращает новую копию объекта/ returns a new copy of the object
7
- */
8
- export function copyObject<T>(value: T): T {
9
- return JSON.parse(JSON.stringify(value)) as T
10
- }
@@ -1,40 +0,0 @@
1
- import { forEach } from './forEach'
2
- import { isDomRuntime } from './isDomRuntime'
3
- import { isObjectNotArray } from './isObjectNotArray'
4
- import { setElementItem } from './setElementItem'
5
-
6
- /**
7
- * In HTML documents, creates an element with the tag that is specified in the argument.
8
- *
9
- * В HTML-документах создаёт элемент с тегом, который указан в аргументе.
10
- * @param parentElement the DOM node's parent Element/ родитель для нового элемента
11
- * @param tagName A string that specifies the type of element to be created/ строка,
12
- * указывающая элемент какого типа должен быть создан
13
- * @param options an object with attributes or a function for processing an element/ объект
14
- * с атрибутами или функция для обработки элемента
15
- * @param referenceElement the node before which newNode is inserted/ элемент,
16
- * перед которым будет вставлен newElement
17
- */
18
- export function createElement<T extends HTMLElement>(
19
- parentElement?: HTMLElement,
20
- tagName = 'div',
21
- options?: Partial<T> | Record<keyof T, T[keyof T]> | ((element: T) => void),
22
- referenceElement?: HTMLElement
23
- ): T | undefined {
24
- if (!isDomRuntime()) {
25
- return undefined
26
- }
27
-
28
- const element = document.createElement(tagName) as T
29
-
30
- if (typeof options === 'function') {
31
- options(element)
32
- } else if (isObjectNotArray(options)) {
33
- forEach(options as Record<string, any>, (value, key) => {
34
- setElementItem(element, key as keyof T, value)
35
- })
36
- }
37
-
38
- parentElement?.insertBefore<T>(element, referenceElement ?? null)
39
- return element
40
- }
@@ -1,15 +0,0 @@
1
- import { isDomRuntime } from './isDomRuntime'
2
-
3
- /**
4
- * Selects the first element that matches the specified selectors.
5
- *
6
- * Выбирает первый элемент, который соответствует указанным селекторам.
7
- * @param selectors selectors/ селекторы
8
- */
9
- export function domQuerySelector<E extends Element = Element>(selectors: string): E | undefined {
10
- if (isDomRuntime()) {
11
- return document.querySelector<E>(selectors) ?? undefined
12
- }
13
-
14
- return undefined
15
- }
@@ -1,15 +0,0 @@
1
- import { isDomRuntime } from './isDomRuntime'
2
-
3
- /**
4
- * Selects all elements that match the specified selectors.
5
- *
6
- * Выбирает все элементы, которые соответствуют указанным селекторам.
7
- * @param selectors selectors/ селекторы
8
- */
9
- export function domQuerySelectorAll<E extends Element = Element>(selectors: string): NodeListOf<E> | undefined {
10
- if (isDomRuntime()) {
11
- return document.querySelectorAll<E>(selectors)
12
- }
13
-
14
- return undefined
15
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * Encodes special characters in a string for safe use in HTML attributes.
3
- *
4
- * Кодирует специальные символы в строке для безопасного использования в HTML-атрибутах.
5
- * @param text text to encode / текст для кодирования
6
- */
7
- export function encodeAttribute(text: string): string {
8
- return text
9
- .replace(/&/g, '&amp;')
10
- .replace(/</g, '&lt;')
11
- .replace(/>/g, '&gt;')
12
- .replace(/"/g, '&quot;')
13
- .replace(/'/g, '&#39;')
14
- .trim()
15
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * Stop listening to events in depth.
3
- *
4
- * Остановить прослушивания события в глубину.
5
- * @param event event instance/ экземпляр события
6
- */
7
- export function eventStopPropagation(event: Event): void {
8
- event.preventDefault()
9
- event.stopPropagation()
10
- }
@@ -1,13 +0,0 @@
1
- import { isFunction } from './isFunction'
2
-
3
- import { type FunctionArgs } from '../types/basicTypes'
4
-
5
- /**
6
- * The function is executed and returns its result. Or returns the input data, if it is not a function.
7
- *
8
- * Выполняется функция и возвращает ее результат. Или возвращает входные данные, если это не функция
9
- * @param callback function or any value/ функция или любое значение
10
- */
11
- export function executeFunction<T>(callback: T | FunctionArgs<any, T>): T {
12
- return isFunction(callback) ? callback() : callback
13
- }
@@ -1,19 +0,0 @@
1
- import { executeFunction } from './executeFunction'
2
-
3
- /**
4
- * Returns the execution result of an asynchronous function.
5
- *
6
- * Возвращает выполнение асинхронной функции.
7
- * @param callback function or any value/ функция или любое значение
8
- */
9
- export async function executePromise<T>(
10
- callback: (() => Promise<T>) | (() => T) | T
11
- ): Promise<T> {
12
- const data = executeFunction<Promise<T> | T>(callback)
13
-
14
- if (data instanceof Promise) {
15
- return (await data)
16
- }
17
-
18
- return data as T
19
- }