@mediacubeco/base 0.0.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.
@@ -0,0 +1,1243 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * @description
4
+ * Общие утилитарные типы для проектов на TypeScript.
5
+ * Содержит типы для примитивов (Nullable, NotNullable), структур данных
6
+ * (BaseRecord, Entry, List), функций (Callback, AsyncCallback) и вспомогательные
7
+ * утилиты (KeyOf, ValueOf, Decrement, Increment и др.).
8
+ * Модуль не содержит рантайм-кода — только типы.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * type User = { id: number; name?: string | null }
13
+ *
14
+ * type UserId = ValueOf<Pick<User, 'id'>>
15
+ * type SafeName = NotNullable<User['name']>
16
+ * ```
17
+ */
18
+ type NullablePrimitive = undefined | null;
19
+ /**
20
+ * Ключи объекта `Data`. Удобный псевдоним для `keyof`.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * type UserKeys = KeyOf<{ id: number; name: string }> // 'id' | 'name'
25
+ * ```
26
+ */
27
+ type KeyOf<Data> = keyof Data;
28
+ /**
29
+ * Объединение всех возможных значений объекта `Data`.
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * type UserValue = ValueOf<{ id: number; name: string }> // number | string
34
+ * ```
35
+ */
36
+ type ValueOf<Data> = Data[KeyOf<Data>];
37
+ /** Тип одного элемента массива или кортежа. */
38
+ type IterableOf<Data extends unknown[]> = Data[number];
39
+ /** Служебный псевдоним для `never` или другого "пустого" значения. */
40
+ type Nothing<Data = never> = Data;
41
+ /**
42
+ * Тип, допускающий null или undefined (например для опциональных полей).
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * type MaybeName = Nullable<string> // string | null | undefined
47
+ * ```
48
+ */
49
+ type Nullable<Data = undefined> = Data | NullablePrimitive;
50
+ /**
51
+ * Тип, исключающий null и undefined (гарантированно заданное значение).
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * type Name = NotNullable<string | null | undefined> // string
56
+ * ```
57
+ */
58
+ type NotNullable<Data = undefined> = Exclude<Data, NullablePrimitive>;
59
+ /** Число или значение, которое можно привести к числу, включая строковый литерал числа. */
60
+ type Numerable<Data = number> = Data | number | `${number}`;
61
+ /** Значение, которое может быть как синхронным, так и обёрнутым в Promise. */
62
+ type MaybeAsync<Data = never> = Data | Promise<Data>;
63
+ /**
64
+ * Допустимые ключи объекта (как в Record).
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * type Key = BaseKey // string | number | symbol
69
+ * ```
70
+ */
71
+ type BaseKey = string | number | symbol;
72
+ /**
73
+ * Массив элементов (базовый тип для списков).
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * type IdList = BaseList<number> // number[]
78
+ * ```
79
+ */
80
+ type BaseList<Item = unknown> = Item[];
81
+ /**
82
+ * Объект с ключами Key и значениями Value (обобщение Record).
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * type UserMap = BaseRecord<string, 'name' | 'role'>
87
+ * ```
88
+ */
89
+ type BaseRecord<Value = unknown, Key extends BaseKey = BaseKey> = Record<Key, Value>;
90
+ /** Объединение `{ key, value }` для каждой пары ключ-значение объекта. */
91
+ type Entry<Data> = {
92
+ [Key in KeyOf<Data>]: {
93
+ key: Key;
94
+ value: Data[Key];
95
+ };
96
+ }[KeyOf<Data>];
97
+ /** Делает указанные ключи обязательными, а остальные оставляет опциональными. */
98
+ type Include<Data, Key extends KeyOf<Data>> = Required<Pick<Data, Key>> & Partial<Omit<Data, Key>>;
99
+ /** Разделяет объект на кортеж из выбранных и оставшихся свойств. */
100
+ type Divide<Data, Key extends KeyOf<Data>> = [Pick<Data, Key>, Omit<Data, Key>];
101
+ /** Заполняет набор ключей значениями из `Data` или `DefaultValue`, если ключ отсутствует. */
102
+ type Filled<Data, Key extends BaseKey, DefaultValue = undefined> = {
103
+ [SomeKey in Key]: SomeKey extends KeyOf<Data> ? Data[SomeKey] : DefaultValue;
104
+ };
105
+ /** Общая часть нескольких объектов: только совпадающие ключи и совместимые типы значений. */
106
+ type Shared<DataList extends BaseList[], FirstData extends IterableOf<DataList> = IterableOf<DataList>, SecondData extends IterableOf<DataList> = IterableOf<DataList>> = {
107
+ [Key in KeyOf<FirstData> & KeyOf<SecondData>]: FirstData[Key] extends SecondData[Key] ? FirstData[Key] : never;
108
+ };
109
+ /**
110
+ * Кортеж фиксированной длины `Length`, заполненный элементами типа `Item`.
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * type Pair = List<2, string> // [string, string]
115
+ * ```
116
+ */
117
+ type List<Length extends number, Item = unknown, ResultList extends Item[] = []> = Length extends ResultList['length'] ? ResultList : List<Length, Item, [...ResultList, Item]>;
118
+ /**
119
+ * Уменьшает числовой литерал на единицу.
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * type Two = Decrement<3> // 2
124
+ * ```
125
+ */
126
+ type Decrement<Value extends number> = List<Value> extends [infer _, ...infer Rest] ? Rest['length'] : never;
127
+ /**
128
+ * Увеличивает числовой литерал на единицу.
129
+ *
130
+ * @example
131
+ * ```typescript
132
+ * type Four = Increment<3> // 4
133
+ * ```
134
+ */
135
+ type Increment<Value extends number> = [...List<Value>, IterableOf<List<Value>>]['length'];
136
+ /**
137
+ * Функция без аргументов и возвращаемого значения.
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * const noop: Noop = () => {}
142
+ * ```
143
+ */
144
+ type Noop = () => void;
145
+ /**
146
+ * Синхронная функция с заданным списком параметров и результатом.
147
+ * @template ParamList - кортеж типов аргументов
148
+ * @template Result - тип возвращаемого значения
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * type Sum = Callback<[number, number], number>
153
+ * ```
154
+ */
155
+ type Callback<ParamList extends BaseList = BaseList, Result = void> = (...paramList: ParamList) => Result;
156
+ /**
157
+ * Асинхронная функция с заданным списком параметров и результатом.
158
+ *
159
+ * @example
160
+ * ```typescript
161
+ * type FetchUser = AsyncCallback<[string], { id: string }>
162
+ * ```
163
+ */
164
+ type AsyncCallback<ParamList extends BaseList = BaseList, Result = void> = (...paramList: ParamList) => Promise<Result>;
165
+ /** Любая синхронная функция без ограничений на аргументы и результат. */
166
+ type AnyCallback = Callback<any[], any>;
167
+ /** Любая асинхронная функция без ограничений на аргументы и результат. */
168
+ type AnyAsyncCallback = AsyncCallback<any[], any>;
169
+ /** Извлекает кортеж аргументов из типа функции. */
170
+ type CallbackParamList<Callback> = Callback extends (...args: infer ParamList) => any ? ParamList : never;
171
+ /** Извлекает тип возвращаемого значения из типа функции. */
172
+ type CallbackResult<Callback> = Callback extends (...args: any) => infer Result ? Result : any;
173
+
174
+ type ExtraSizeRange<Level extends number, Value extends string, Result extends string = `x${Value}`> = Level extends 1 ? Result : ExtraSizeRange<Decrement<Level>, Value, `${Level}x${Value}` | Result>;
175
+ /**
176
+ * Набор строковых размеров относительно базовых `s`, `m`, `l`.
177
+ * Позволяет расширять диапазон вниз (`xs`, `2xs`, ...) и вверх (`xl`, `2xl`, ...).
178
+ *
179
+ * @example
180
+ * ```typescript
181
+ * type ButtonSize = SizeRange<2, 1> // '2xs' | 'xs' | 's' | 'm' | 'l' | 'xl'
182
+ * ```
183
+ */
184
+ type SizeRange<ExtraLevelDown extends number = 1, ExtraLevelUp extends number = 1> = ExtraSizeRange<ExtraLevelDown, 's'> | 's' | 'm' | 'l' | ExtraSizeRange<ExtraLevelUp, 'l'>;
185
+ /**
186
+ * Объединение чисел от `1` до `Level`.
187
+ *
188
+ * @example
189
+ * ```typescript
190
+ * type Steps = LevelRange<3> // 1 | 2 | 3
191
+ * ```
192
+ */
193
+ type LevelRange<Level extends number, Result extends number = Level> = Level extends 1 ? Result : LevelRange<Decrement<Level>, Result | Decrement<Level>>;
194
+
195
+ declare class Event {
196
+ isDefaultPrevented: boolean;
197
+ constructor();
198
+ preventDefault(): void;
199
+ overrideDefault(): void;
200
+ }
201
+
202
+ type EventEmitterDefaultAction = Noop;
203
+ type EventEmitterListener<Params> = Callback<[Event & Params]>;
204
+
205
+ /**
206
+ * Имена событий, которые генерирует `ErrorHandler`.
207
+ */
208
+ declare enum ErrorHandlerEventName {
209
+ /** Ошибка была залогирована и передана подписчикам без выбрасывания. */
210
+ Capture = "capture",
211
+ /** Зарезервированное имя события для проброса ошибки дальше по цепочке. */
212
+ Forward = "forward"
213
+ }
214
+
215
+ /**
216
+ * Сообщение об ошибке для пользователя или лога.
217
+ *
218
+ * @example
219
+ * ```typescript
220
+ * const message: ErrorHandlerMessage = 'Request failed'
221
+ * ```
222
+ */
223
+ type ErrorHandlerMessage = string;
224
+ /**
225
+ * Любое значение, которое может быть перехвачено как ошибка (Error или unknown).
226
+ *
227
+ * @example
228
+ * ```typescript
229
+ * const error: ErrorHandlerError = new Error('Timeout')
230
+ * ```
231
+ */
232
+ type ErrorHandlerError = unknown;
233
+ /**
234
+ * Словарь ошибок валидации (например поле → сообщение или список сообщений).
235
+ *
236
+ * @example
237
+ * ```typescript
238
+ * const errors: ErrorHandlerErrors<'email'> = { email: 'Invalid email' }
239
+ * ```
240
+ */
241
+ type ErrorHandlerErrors<Key extends BaseKey = BaseKey, Value = Nullable<string | string[]>> = BaseRecord<Value, Key>;
242
+ /**
243
+ * Результат разбора ошибки через ErrorHandler.parse.
244
+ * Используется для единообразного представления ошибок API (message, status, errors, isExternal).
245
+ *
246
+ * @example
247
+ * ```typescript
248
+ * const result: ErrorHandlerParseResult<'email'> = {
249
+ * message: 'Validation failed',
250
+ * status: 422,
251
+ * errors: { email: 'Invalid email' },
252
+ * isExternal: true
253
+ * }
254
+ * ```
255
+ */
256
+ type ErrorHandlerParseResult<Key extends BaseKey> = {
257
+ message: string;
258
+ status: number;
259
+ errors: ErrorHandlerErrors<Key>;
260
+ isExternal: boolean;
261
+ };
262
+ /**
263
+ * Конфиг одного «кейса» для ErrorHandler.parse: проверка типа ошибки и функция разбора.
264
+ * Регистрируется через ErrorHandler.case().
265
+ *
266
+ * @example
267
+ * ```typescript
268
+ * const config: ErrorHandlerCaseConfig<Response> = {
269
+ * check: (error): error is Response => error instanceof Response,
270
+ * parse: (error, defaultResult) => ({ ...defaultResult, status: error.status })
271
+ * }
272
+ * ```
273
+ */
274
+ type ErrorHandlerCaseConfig<ErrorHandlerCaseError = any> = {
275
+ check: <Key extends BaseKey>(error: ErrorHandlerError, defaultResult: ErrorHandlerParseResult<Key>) => error is ErrorHandlerCaseError;
276
+ parse: <Key extends BaseKey>(error: ErrorHandlerCaseError, defaultResult: ErrorHandlerParseResult<Key>) => ErrorHandlerParseResult<Key>;
277
+ };
278
+ /**
279
+ * Конфигурация при логировании/пробросе ошибки (signal, опциональные message, payload, stack).
280
+ *
281
+ * @example
282
+ * ```typescript
283
+ * const config: ErrorHandlerConfig = {
284
+ * signal: 'api',
285
+ * message: 'Cannot load profile'
286
+ * }
287
+ * ```
288
+ */
289
+ type ErrorHandlerConfig = {
290
+ signal: string;
291
+ message?: ErrorHandlerMessage;
292
+ payload?: BaseRecord<unknown>;
293
+ stack?: string[];
294
+ };
295
+ /**
296
+ * Параметры события capture/forward: ошибка и конфиг.
297
+ *
298
+ * @example
299
+ * ```typescript
300
+ * const params: ErrorHandlerEventParams = {
301
+ * error: new Error('Timeout'),
302
+ * config: { signal: 'api' }
303
+ * }
304
+ * ```
305
+ */
306
+ type ErrorHandlerEventParams = {
307
+ error: ErrorHandlerError;
308
+ config: ErrorHandlerConfig;
309
+ };
310
+
311
+ /**
312
+ * Централизованная обработка ошибок: логирование, подписка на события, разбор ошибок по кейсам.
313
+ * Статический класс; подписка через on('capture', …), регистрация кейсов через case().
314
+ * capture — залогировать и вызвать событие, не бросать; forward — залогировать, вызвать событие и пробросить.
315
+ *
316
+ * @example
317
+ * ```typescript
318
+ * ErrorHandler.on(ErrorHandlerEventName.Capture, ({ error }) => {
319
+ * console.error(error)
320
+ * })
321
+ *
322
+ * ErrorHandler.capture(new Error('Request failed'), { signal: 'api' })
323
+ * ```
324
+ */
325
+ declare class ErrorHandler {
326
+ private static eventEmitter;
327
+ private static caseList;
328
+ private static log;
329
+ /**
330
+ * Доступ к подписке на события обработчика ошибок.
331
+ * Обычно используется как `ErrorHandler.on(ErrorHandlerEventName.Capture, listener)`.
332
+ *
333
+ * @returns Метод подписки `EventEmitter.on`
334
+ *
335
+ * @example
336
+ * ```typescript
337
+ * ErrorHandler.on(ErrorHandlerEventName.Capture, ({ config }) => {
338
+ * console.log(config.signal)
339
+ * })
340
+ * ```
341
+ */
342
+ static get on(): (name: ErrorHandlerEventName, listener: EventEmitterListener<ErrorHandlerEventParams>) => () => void;
343
+ /**
344
+ * Доступ к удалению конкретного подписчика обработчика ошибок.
345
+ *
346
+ * @returns Метод отписки `EventEmitter.off`
347
+ *
348
+ * @example
349
+ * ```typescript
350
+ * ErrorHandler.off(ErrorHandlerEventName.Capture, listener)
351
+ * ```
352
+ */
353
+ static get off(): (name: ErrorHandlerEventName, listener: EventEmitterListener<ErrorHandlerEventParams>) => void;
354
+ /**
355
+ * Доступ к очистке подписок по имени события.
356
+ *
357
+ * @returns Метод очистки `EventEmitter.clear`
358
+ *
359
+ * @example
360
+ * ```typescript
361
+ * ErrorHandler.clear(ErrorHandlerEventName.Capture)
362
+ * ```
363
+ */
364
+ static get clear(): (name: ErrorHandlerEventName) => void;
365
+ /**
366
+ * Создаёт экземпляр Error с сообщением и опциональной причиной (cause).
367
+ *
368
+ * @param message - Текст ошибки
369
+ * @param error - Исходная ошибка или причина
370
+ * @returns Новый объект Error (не бросается)
371
+ *
372
+ * @example
373
+ * ```typescript
374
+ * const error = ErrorHandler.create('Request failed', new Error('Timeout'))
375
+ * ```
376
+ */
377
+ static create(message: ErrorHandlerMessage, error?: ErrorHandlerError): Error;
378
+ /**
379
+ * Создаёт ошибку и немедленно бросает её (never).
380
+ * Используется для заглушек (например «Not implemented»).
381
+ *
382
+ * @param message - Текст ошибки
383
+ * @param error - Исходная ошибка или причина
384
+ * @returns Управление не возвращается, так как метод выбрасывает исключение
385
+ *
386
+ * @example
387
+ * ```typescript
388
+ * ErrorHandler.throw('Not implemented')
389
+ * ```
390
+ */
391
+ static throw(message: ErrorHandlerMessage, error?: ErrorHandlerError): never;
392
+ /**
393
+ * Логирует ошибку и эмитит событие 'capture'. Ошибку не бросает.
394
+ * Подписчики могут отправить данные в мониторинг и т.д.
395
+ *
396
+ * @param error - Ошибка или любое перехваченное значение
397
+ * @param config - Конфигурация логирования и сопровождающих данных
398
+ *
399
+ * @example
400
+ * ```typescript
401
+ * ErrorHandler.capture(new Error('Request failed'), {
402
+ * signal: 'api',
403
+ * message: 'Cannot load profile'
404
+ * })
405
+ * ```
406
+ */
407
+ static capture(error: ErrorHandlerError, config: ErrorHandlerConfig): void;
408
+ /**
409
+ * Логирует ошибку, эмитит 'capture' и пробрасывает ошибку дальше (never).
410
+ *
411
+ * @param error - Ошибка или любое перехваченное значение
412
+ * @param config - Конфигурация логирования и сопровождающих данных
413
+ * @returns Управление не возвращается, так как метод выбрасывает ошибку дальше
414
+ *
415
+ * @example
416
+ * ```typescript
417
+ * ErrorHandler.forward(new Error('Forbidden'), {
418
+ * signal: 'auth'
419
+ * })
420
+ * ```
421
+ */
422
+ static forward(error: ErrorHandlerError, config: ErrorHandlerConfig): never;
423
+ /**
424
+ * Регистрирует кейс для parse: при совпадении check() будет вызван parse().
425
+ * Порядок регистрации важен — используется первый подходящий кейс.
426
+ *
427
+ * @param config - Пара функций `check` и `parse` для пользовательского разбора ошибок
428
+ *
429
+ * @example
430
+ * ```typescript
431
+ * ErrorHandler.case({
432
+ * check: (error): error is Response => error instanceof Response,
433
+ * parse: (error, defaultResult) => ({
434
+ * ...defaultResult,
435
+ * status: error.status
436
+ * })
437
+ * })
438
+ * ```
439
+ */
440
+ static case<ErrorHandlerCaseError>(config: ErrorHandlerCaseConfig<ErrorHandlerCaseError>): void;
441
+ /**
442
+ * Разбирает ошибку в единый формат (message, status, errors, isExternal).
443
+ * Сначала проверяются зарегистрированные кейсы; если ни один не подошёл — базовый разбор (Error.message или default).
444
+ *
445
+ * @param error - Ошибка или любое неизвестное значение
446
+ * @returns Унифицированный результат разбора ошибки
447
+ *
448
+ * @example
449
+ * ```typescript
450
+ * const parsed = ErrorHandler.parse(new Error('Request failed'))
451
+ * console.log(parsed.message)
452
+ * ```
453
+ */
454
+ static parse<Key extends BaseKey>(error: ErrorHandlerError): ErrorHandlerParseResult<Key>;
455
+ }
456
+
457
+ /**
458
+ * Лёгкий EventEmitter с поддержкой подписок, отписок и `defaultAction`.
459
+ * Слушатель получает объект события, объединённый с переданными параметрами emit.
460
+ *
461
+ * @example
462
+ * ```typescript
463
+ * const emitter = new EventEmitter<'save', { id: number }>()
464
+ *
465
+ * emitter.on('save', (event) => {
466
+ * console.log(event.id)
467
+ * })
468
+ *
469
+ * emitter.emit('save', { id: 1 })
470
+ * ```
471
+ */
472
+ declare class EventEmitter<EventName extends string = string, EventParams extends Nullable<object> = undefined> {
473
+ private subscriptions;
474
+ constructor();
475
+ /**
476
+ * Вызывает событие и передаёт параметры всем подписчикам.
477
+ * Если ни один слушатель не отменил стандартное действие, дополнительно вызывается `defaultAction`.
478
+ *
479
+ * @param name - Имя события
480
+ * @param params - Дополнительные параметры события
481
+ * @param defaultAction - Функция, которая выполнится после слушателей, если действие не отменено
482
+ *
483
+ * @example
484
+ * ```typescript
485
+ * emitter.emit('save', { id: 1 }, () => {
486
+ * console.log('saved')
487
+ * })
488
+ * ```
489
+ */
490
+ emit(name: EventName, params?: EventParams, defaultAction?: EventEmitterDefaultAction): void;
491
+ /**
492
+ * Подписывает слушатель на событие.
493
+ *
494
+ * @param name - Имя события
495
+ * @param listener - Обработчик события
496
+ * @returns Функция для отписки от события
497
+ *
498
+ * @example
499
+ * ```typescript
500
+ * const unsubscribe = emitter.on('save', (event) => {
501
+ * console.log(event.id)
502
+ * })
503
+ *
504
+ * unsubscribe()
505
+ * ```
506
+ */
507
+ on(name: EventName, listener: EventEmitterListener<EventParams>): () => void;
508
+ /**
509
+ * Удаляет конкретный слушатель из подписки на событие.
510
+ *
511
+ * @param name - Имя события
512
+ * @param listener - Слушатель, которого нужно удалить
513
+ *
514
+ * @example
515
+ * ```typescript
516
+ * emitter.off('save', listener)
517
+ * ```
518
+ */
519
+ off(name: EventName, listener: EventEmitterListener<EventParams>): void;
520
+ /**
521
+ * Полностью очищает подписку на указанное событие.
522
+ *
523
+ * @param name - Имя события
524
+ *
525
+ * @example
526
+ * ```typescript
527
+ * emitter.clear('save')
528
+ * ```
529
+ */
530
+ clear(name: EventName): void;
531
+ }
532
+
533
+ type LogSignal = string;
534
+ type LogParamList = any[];
535
+ type LogStyles = string;
536
+
537
+ /**
538
+ * Статический helper для форматированного вывода сообщений в консоль.
539
+ * Поддерживает обычные сообщения, стилизованные группы и набор `formatted`-методов с signal.
540
+ *
541
+ * @example
542
+ * ```typescript
543
+ * Log.info('App started')
544
+ * Log.formatted.success('auth', 'Signed in')
545
+ * ```
546
+ */
547
+ declare class Log {
548
+ #private;
549
+ /**
550
+ * Набор методов для логирования с предварительным форматированием по signal.
551
+ *
552
+ * @example
553
+ * ```typescript
554
+ * Log.formatted.warning('api', 'Slow response')
555
+ * ```
556
+ */
557
+ static readonly formatted: {
558
+ info: (paramList_0: string, ...paramList: any[]) => void;
559
+ success: (paramList_0: string, ...paramList: any[]) => void;
560
+ warning: (paramList_0: string, ...paramList: any[]) => void;
561
+ danger: (paramList_0: string, ...paramList: any[]) => void;
562
+ };
563
+ /**
564
+ * Открывает группу логов в консоли и выводит её заголовок.
565
+ *
566
+ * @param signal - Короткий идентификатор группы
567
+ * @param styles - Дополнительные CSS-стили для заголовка
568
+ * @param paramList - Дополнительные данные, которые будут выведены вместе с signal
569
+ *
570
+ * @example
571
+ * ```typescript
572
+ * Log.startGroup('profile', 'color: purple;', { id: 1 })
573
+ * ```
574
+ */
575
+ static startGroup(signal: LogSignal, styles?: LogStyles, ...paramList: LogParamList): void;
576
+ /**
577
+ * Закрывает текущую группу логов в консоли.
578
+ *
579
+ * @example
580
+ * ```typescript
581
+ * Log.endGroup()
582
+ * ```
583
+ */
584
+ static endGroup(): void;
585
+ /**
586
+ * Выводит информационное сообщение.
587
+ *
588
+ * @param paramList - Параметры для вывода в консоль
589
+ *
590
+ * @example
591
+ * ```typescript
592
+ * Log.info('Profile loaded', user)
593
+ * ```
594
+ */
595
+ static info(...paramList: LogParamList): void;
596
+ /**
597
+ * Выводит сообщение об успешном результате.
598
+ *
599
+ * @param paramList - Параметры для вывода в консоль
600
+ *
601
+ * @example
602
+ * ```typescript
603
+ * Log.success('Profile saved')
604
+ * ```
605
+ */
606
+ static success(...paramList: LogParamList): void;
607
+ /**
608
+ * Выводит предупреждение.
609
+ *
610
+ * @param paramList - Параметры для вывода в консоль
611
+ *
612
+ * @example
613
+ * ```typescript
614
+ * Log.warning('Retry in progress')
615
+ * ```
616
+ */
617
+ static warning(...paramList: LogParamList): void;
618
+ /**
619
+ * Выводит сообщение об ошибке.
620
+ *
621
+ * @param paramList - Параметры для вывода в консоль
622
+ *
623
+ * @example
624
+ * ```typescript
625
+ * Log.danger('Request failed', error)
626
+ * ```
627
+ */
628
+ static danger(...paramList: LogParamList): void;
629
+ }
630
+
631
+ type StorageItemConfig<Value = string> = Partial<StorageConfig> & {
632
+ defaultValue?: Value;
633
+ };
634
+
635
+ declare class StorageItem<Value = unknown> {
636
+ private key;
637
+ private model;
638
+ private config?;
639
+ constructor(key: string, model: StorageModel, config?: StorageConfig);
640
+ get(): Promise<Nullable<Value>>;
641
+ get(config: StorageItemConfig<Value>): Promise<Value>;
642
+ set(value: Value, config?: StorageItemConfig<Value>): Promise<void>;
643
+ delete(config?: StorageItemConfig<Value>): Promise<void>;
644
+ has(config?: StorageItemConfig<Value>): Promise<boolean>;
645
+ }
646
+
647
+ /**
648
+ * Тип экземпляра Storage после вызова .create(key): объект с полем key типа StorageItem<Value>.
649
+ * Позволяет типизировать storage.user, storage.settings и т.д.
650
+ *
651
+ * @example
652
+ * ```typescript
653
+ * type UserStorage = StorageInstance<'user', { name: string }>
654
+ * ```
655
+ */
656
+ type StorageInstance<Key extends string = string, Value = unknown> = {
657
+ [key in Key]: StorageItem<Value>;
658
+ };
659
+ /**
660
+ * Абстрактная модель хранилища ключ–значение.
661
+ * Реализация может быть localStorage, sessionStorage, серверный API и т.д.
662
+ * Значения передаются как строки; сериализация/десериализация (например JSON) — в StorageItem.
663
+ *
664
+ * @example
665
+ * ```typescript
666
+ * const model: StorageModel = {
667
+ * get: (key) => localStorage.getItem(key),
668
+ * set: (key, value) => localStorage.setItem(key, value),
669
+ * delete: (key) => localStorage.removeItem(key)
670
+ * }
671
+ * ```
672
+ */
673
+ type StorageModel = {
674
+ get: Callback<[string], MaybeAsync<Nullable<string>>>;
675
+ set: Callback<[string, string], MaybeAsync<void>>;
676
+ delete: Callback<[string], MaybeAsync<void>>;
677
+ };
678
+ /**
679
+ * Конфиг Storage/StorageItem: опция отладочного логирования через Log.
680
+ *
681
+ * @example
682
+ * ```typescript
683
+ * const config: StorageConfig = { withDebug: true }
684
+ * ```
685
+ */
686
+ type StorageConfig = {
687
+ withDebug?: boolean;
688
+ };
689
+
690
+ /**
691
+ * Абстракция над ключ–значение хранилищем. Принимает модель (get/set/delete) и через .create(key)
692
+ * добавляет на экземпляр поле с StorageItem для данного ключа. Данные сериализуются в JSON в StorageItem.
693
+ *
694
+ * @example
695
+ * const model = { get: k => Promise.resolve(localStorage.getItem(k)), set: (k,v) => ..., delete: k => ... }
696
+ * const storage = new Storage(model).create('user')
697
+ * await storage.user.set({ name: 'John' })
698
+ * const user = await storage.user.get()
699
+ */
700
+ declare class Storage {
701
+ private readonly model;
702
+ private readonly config?;
703
+ /**
704
+ * @param model - Реализация хранилища (например обёртка над localStorage или API)
705
+ * @param config - Опции (withDebug для отладочного логирования)
706
+ *
707
+ * @example
708
+ * ```typescript
709
+ * const storage = new Storage(model, { withDebug: true })
710
+ * ```
711
+ */
712
+ constructor(model: StorageModel, config?: StorageConfig);
713
+ /**
714
+ * Должен вернуть все элементы хранилища.
715
+ * В базовой реализации не поддержан и выбрасывает `Not implemented`.
716
+ *
717
+ * @returns Никогда не завершается успешно в базовом классе
718
+ *
719
+ * @example
720
+ * ```typescript
721
+ * await storage.all() // Error: Not implemented
722
+ * ```
723
+ */
724
+ all(): Promise<never>;
725
+ /**
726
+ * Должен очистить всё хранилище.
727
+ * В базовой реализации не поддержан и выбрасывает `Not implemented`.
728
+ *
729
+ * @returns Никогда не завершается успешно в базовом классе
730
+ *
731
+ * @example
732
+ * ```typescript
733
+ * await storage.clear() // Error: Not implemented
734
+ * ```
735
+ */
736
+ clear(): Promise<never>;
737
+ /**
738
+ * Создаёт и привязывает к экземпляру Storage элемент хранилища с заданным ключом.
739
+ * Возвращает this с новым полем key типа StorageItem<Value> (типизация через StorageInstance).
740
+ *
741
+ * @param key - Имя ключа (и имени поля на экземпляре, например 'user' → storage.user)
742
+ * @returns this с добавленным полем key
743
+ *
744
+ * @example
745
+ * ```typescript
746
+ * const storage = new Storage(model).create<'user', { name: string }>('user')
747
+ * await storage.user.set({ name: 'John' })
748
+ * ```
749
+ */
750
+ create<Key extends string = string, Value = unknown>(key: Key): this & StorageInstance<Key, Value>;
751
+ }
752
+
753
+ /**
754
+ * Асинхронная задержка на указанное количество миллисекунд.
755
+ * Удобна для пауз между ретраями, анимациями или батч-обработкой.
756
+ *
757
+ * @param delay - Длительность ожидания в миллисекундах
758
+ * @returns Promise, который выполнится через указанное время
759
+ *
760
+ * @example
761
+ * ```typescript
762
+ * await wait(300)
763
+ * ```
764
+ */
765
+ declare const wait: (delay: number) => Promise<unknown>;
766
+ /**
767
+ * Собирает объект из переданного значения и опционального исходного объекта.
768
+ * Поддерживает три сценария: вернуть объект как есть, слить два объекта или записать примитив по ключу.
769
+ *
770
+ * @param value - Объект целиком или значение для поля
771
+ * @param data - Исходный объект для объединения
772
+ * @param key - Ключ, в который нужно записать примитивное значение
773
+ * @returns Новый объект с объединёнными данными
774
+ *
775
+ * @example
776
+ * ```typescript
777
+ * compose({ name: 'John' }) // { name: 'John' }
778
+ * compose({ age: 18 }, { name: 'John' }) // { name: 'John', age: 18 }
779
+ * compose('John', { age: 18 }, 'name') // { age: 18, name: 'John' }
780
+ * ```
781
+ */
782
+ declare function compose<Data extends object, Value extends Data>(value: Value): Value;
783
+ declare function compose<Data extends object, Value extends Data>(value: Value, data: Data): Data & Value;
784
+ declare function compose<Data extends object, Key extends KeyOf<Data>, Value extends Data[Key] | Data>(value: Value, data: Nullable<Partial<Data>>, key: Nullable<Key>): Data;
785
+ /**
786
+ * Возвращает значение объекта по ключу.
787
+ * Если ключ отсутствует или равен null/undefined, может вернуть значение по умолчанию.
788
+ *
789
+ * @param key - Ключ поля
790
+ * @param data - Объект-источник
791
+ * @param defaultValue - Резервное значение, если ключ не задан или значение отсутствует
792
+ * @returns Значение по ключу или defaultValue
793
+ *
794
+ * @example
795
+ * ```typescript
796
+ * getValueByKey('name', { name: 'John' }) // 'John'
797
+ * getValueByKey('age', { name: 'John' }, 18) // 18
798
+ * ```
799
+ */
800
+ declare function getValueByKey<Value, Key extends BaseKey>(key: Key, data: BaseRecord<Value, Key>): Value;
801
+ declare function getValueByKey<Value, Key extends BaseKey, DefaultValue>(key: Nullable<Key>, data: Partial<BaseRecord<Value, Key>>, defaultValue: DefaultValue): Value | DefaultValue;
802
+ /**
803
+ * Преобразует значения объекта, сохраняя его исходные ключи.
804
+ *
805
+ * @param data - Объект, который нужно обойти
806
+ * @param callback - Функция преобразования значения
807
+ * @returns Новый объект с теми же ключами и результатами callback
808
+ *
809
+ * @example
810
+ * ```typescript
811
+ * mapRecord({ a: 1, b: 2 }, (_, value) => value * 2) // { a: 2, b: 4 }
812
+ * ```
813
+ */
814
+ declare const mapRecord: <ResultValue, Data extends object, Key extends KeyOf<Data>, Value extends ValueOf<Data>, Result = BaseRecord<ResultValue, Key>>(data: Data, callback: (key: Key, value: Value, index: number, list: [Key, Value][]) => ResultValue) => Result;
815
+ /**
816
+ * Безопасно вызывает callback, если передано действительно вызываемое значение.
817
+ *
818
+ * @param callback - Функция для вызова
819
+ * @param paramList - Аргументы, которые будут переданы в callback
820
+ * @returns Результат callback или undefined, если callback не является функцией
821
+ *
822
+ * @example
823
+ * ```typescript
824
+ * runCallback((name: string) => `Hello, ${name}`, 'John') // 'Hello, John'
825
+ * runCallback(undefined, 'John') // undefined
826
+ * ```
827
+ */
828
+ declare const runCallback: <Callback, Result = Callback extends AnyCallback ? ReturnType<Callback> : void>(callback: Callback, ...paramList: CallbackParamList<Callback>) => Result;
829
+
830
+ /**
831
+ * Создаёт функцию с отложенным вызовом callback.
832
+ * Повторный вызов до истечения delay сбрасывает предыдущий таймер.
833
+ *
834
+ * @param callback - Функция, которую нужно вызывать с задержкой
835
+ * @param delay - Задержка в миллисекундах
836
+ * @returns Обёртка с debounce-поведением
837
+ *
838
+ * @example
839
+ * ```typescript
840
+ * const save = debounce(() => api.save(), 300)
841
+ * input.addEventListener('input', save)
842
+ * ```
843
+ */
844
+ declare const debounce: <Callback>(callback: Callback, delay: number) => (...params: CallbackParamList<Callback>) => void;
845
+ /**
846
+ * Создаёт функцию, которая допускает не более одного вызова за период delay.
847
+ *
848
+ * @param callback - Функция, которую нужно ограничить по частоте вызовов
849
+ * @param delay - Интервал блокировки в миллисекундах
850
+ * @returns Обёртка с throttle-поведением
851
+ *
852
+ * @example
853
+ * ```typescript
854
+ * const onScroll = throttle(() => console.log('scroll'), 100)
855
+ * window.addEventListener('scroll', onScroll)
856
+ * ```
857
+ */
858
+ declare const throttle: <Callback>(callback: Callback, delay: number) => (...params: CallbackParamList<Callback>) => void;
859
+
860
+ /**
861
+ * Фильтрует список объектов по булевому полю.
862
+ * Если у элемента нет указанного ключа, такой элемент сохраняется.
863
+ *
864
+ * @param list - Исходный список объектов
865
+ * @param key - Булево поле для фильтрации, по умолчанию `isVisible`
866
+ * @returns Новый список, содержащий только подходящие элементы
867
+ *
868
+ * @example
869
+ * ```typescript
870
+ * filterByKey([{ isVisible: true }, { isVisible: false }]) // [{ isVisible: true }]
871
+ * ```
872
+ */
873
+ declare function filterByKey<Key extends KeyOf<Item>, Item extends object & BaseRecord<boolean, Key>>(list: Item[], key?: Key): Item[];
874
+ /**
875
+ * Удаляет дубликаты из списка объектов по значению указанного ключа.
876
+ *
877
+ * @param data - Список объектов
878
+ * @param key - Ключ, по которому определяется уникальность
879
+ * @returns Новый список без повторяющихся значений key
880
+ *
881
+ * @example
882
+ * ```typescript
883
+ * filterDuplicateByKey([{ id: 1 }, { id: 1 }, { id: 2 }], 'id') // [{ id: 1 }, { id: 2 }]
884
+ * ```
885
+ */
886
+ declare function filterDuplicateByKey<Key extends BaseKey, Item extends object & BaseRecord<any, Key>>(data: Item[], key: Key): Item[];
887
+ /**
888
+ * Возвращает элементы первого списка, которые присутствуют во втором.
889
+ *
890
+ * @param inputList - Список для проверки
891
+ * @param list - Список значений, с которыми нужно сравнить
892
+ * @returns Пересечение двух списков
893
+ *
894
+ * @example
895
+ * ```typescript
896
+ * filterEqualValues([1, 2, 3], [2, 4]) // [2]
897
+ * ```
898
+ */
899
+ declare function filterEqualValues<Item>(inputList: Item[], list: Item[]): Item[];
900
+ /**
901
+ * Удаляет из списка `null` и `undefined`, одновременно сужая тип результата.
902
+ *
903
+ * @param list - Исходный список
904
+ * @returns Список только с непустыми значениями
905
+ *
906
+ * @example
907
+ * ```typescript
908
+ * filterNullableValues([1, null, 2, undefined]) // [1, 2]
909
+ * ```
910
+ */
911
+ declare function filterNullableValues<Item>(list: Item[]): NotNullable<Item>[];
912
+
913
+ /**
914
+ * Проверяет, что объект не содержит перечисляемых свойств.
915
+ *
916
+ * @param object - Объект для проверки
917
+ * @returns `true`, если объект пустой
918
+ *
919
+ * @example
920
+ * ```typescript
921
+ * isObjectEmpty({}) // true
922
+ * isObjectEmpty({ id: 1 }) // false
923
+ * ```
924
+ */
925
+ declare function isObjectEmpty<Param extends object>(object: Param): boolean;
926
+ /**
927
+ * Проверяет, что массив не содержит элементов.
928
+ *
929
+ * @param array - Массив для проверки
930
+ * @returns `true`, если массив пустой
931
+ *
932
+ * @example
933
+ * ```typescript
934
+ * isArrayEmpty([]) // true
935
+ * isArrayEmpty([1]) // false
936
+ * ```
937
+ */
938
+ declare function isArrayEmpty<Param extends BaseList>(array: Param): boolean;
939
+ /**
940
+ * Проверяет наличие ключа в объекте и сужает тип data при успешной проверке.
941
+ *
942
+ * @param key - Ключ, наличие которого нужно проверить
943
+ * @param data - Значение, которое предполагается объектом
944
+ * @returns `true`, если ключ существует в объекте
945
+ *
946
+ * @example
947
+ * ```typescript
948
+ * if (hasKey('name', payload)) {
949
+ * console.log(payload.name)
950
+ * }
951
+ * ```
952
+ */
953
+ declare function hasKey<Key extends BaseKey, Data, Value>(key: Key, data: Data): data is Data & BaseRecord<Value, Key>;
954
+ /**
955
+ * Проверяет, есть ли у двух списков хотя бы одно общее значение.
956
+ *
957
+ * @param inputList - Первый список
958
+ * @param list - Второй список
959
+ * @returns `true`, если найдено хотя бы одно совпадение
960
+ *
961
+ * @example
962
+ * ```typescript
963
+ * hasEqualValues(['a', 'b'], ['c', 'b']) // true
964
+ * hasEqualValues(['a'], ['c']) // false
965
+ * ```
966
+ */
967
+ declare function hasEqualValues<Item>(inputList: Item[], list: Item[]): boolean;
968
+
969
+ /**
970
+ * Приводит значение к массиву: если передано одно значение — возвращает массив из одного элемента,
971
+ * если передан массив — возвращает его без изменений.
972
+ * Удобно для API, которые могут принимать как один элемент, так и массив.
973
+ *
974
+ * @param param - Один элемент или массив элементов
975
+ * @returns Массив элементов (всегда массив)
976
+ *
977
+ * @example
978
+ * ```typescript
979
+ * forceList(1) // [1]
980
+ * forceList([1, 2]) // [1, 2]
981
+ * ```
982
+ *
983
+ * @example
984
+ * ```typescript
985
+ * const ids = forceList(query.id) // query.id: string | string[]
986
+ * ids.forEach(processId)
987
+ * ```
988
+ */
989
+ declare function forceList<Item>(param: Item | Item[]): Item[];
990
+ /**
991
+ * Разбивает массив на подмассивы заданного размера (чанки).
992
+ * Последний чанк может быть меньше size, если длина массива не кратна size.
993
+ *
994
+ * @param list - Исходный массив
995
+ * @param size - Размер одного чанка (целое положительное число)
996
+ * @returns Массив чанков (массив массивов)
997
+ *
998
+ * @example
999
+ * ```typescript
1000
+ * chunkList([1, 2, 3, 4, 5], 2) // [[1, 2], [3, 4], [5]]
1001
+ * chunkList([], 3) // []
1002
+ * ```
1003
+ *
1004
+ * @example
1005
+ * ```typescript
1006
+ * const pages = chunkList(items, PAGE_SIZE)
1007
+ * for (const page of pages) {
1008
+ * await saveBatch(page)
1009
+ * }
1010
+ * ```
1011
+ */
1012
+ declare function chunkList<Item>(list: Item[], size: number): Item[][];
1013
+
1014
+ /**
1015
+ * Проверяет, что значение равно `undefined`.
1016
+ *
1017
+ * @example
1018
+ * ```typescript
1019
+ * isUndefined(undefined) // true
1020
+ * isUndefined(null) // false
1021
+ * ```
1022
+ */
1023
+ declare const isUndefined: (param: unknown) => param is undefined;
1024
+ /**
1025
+ * Проверяет, что значение равно `null`.
1026
+ *
1027
+ * @example
1028
+ * ```typescript
1029
+ * isNull(null) // true
1030
+ * isNull(undefined) // false
1031
+ * ```
1032
+ */
1033
+ declare const isNull: (param: unknown) => param is null;
1034
+ /**
1035
+ * Проверяет, что значение равно `null` или `undefined`.
1036
+ *
1037
+ * @example
1038
+ * ```typescript
1039
+ * isNullable(undefined) // true
1040
+ * isNullable('value') // false
1041
+ * ```
1042
+ */
1043
+ declare const isNullable: (param: unknown) => param is Nullable;
1044
+ /**
1045
+ * Проверяет, что значение имеет тип `string`.
1046
+ *
1047
+ * @example
1048
+ * ```typescript
1049
+ * isString('hello') // true
1050
+ * isString(42) // false
1051
+ * ```
1052
+ */
1053
+ declare const isString: (param: unknown) => param is string;
1054
+ /**
1055
+ * Проверяет, что значение имеет тип `number`.
1056
+ *
1057
+ * @example
1058
+ * ```typescript
1059
+ * isNumber(42) // true
1060
+ * isNumber('42') // false
1061
+ * ```
1062
+ */
1063
+ declare const isNumber: (param: unknown) => param is number;
1064
+ /**
1065
+ * Проверяет, что значение имеет тип `bigint`.
1066
+ *
1067
+ * @example
1068
+ * ```typescript
1069
+ * isBigint(10n) // true
1070
+ * isBigint(10) // false
1071
+ * ```
1072
+ */
1073
+ declare const isBigint: (param: unknown) => param is bigint;
1074
+ /**
1075
+ * Проверяет, что значение является `NaN`.
1076
+ *
1077
+ * @example
1078
+ * ```typescript
1079
+ * isNaN(Number('foo')) // true
1080
+ * isNaN(10) // false
1081
+ * ```
1082
+ */
1083
+ declare const isNaN: (param: unknown) => param is number;
1084
+ /**
1085
+ * Проверяет, что значение имеет тип `boolean`.
1086
+ *
1087
+ * @example
1088
+ * ```typescript
1089
+ * isBoolean(true) // true
1090
+ * isBoolean(0) // false
1091
+ * ```
1092
+ */
1093
+ declare const isBoolean: (param: unknown) => param is boolean;
1094
+ /**
1095
+ * Проверяет, что значение имеет тип `symbol`.
1096
+ *
1097
+ * @example
1098
+ * ```typescript
1099
+ * isSymbol(Symbol('id')) // true
1100
+ * isSymbol('id') // false
1101
+ * ```
1102
+ */
1103
+ declare const isSymbol: (param: unknown) => param is symbol;
1104
+ /**
1105
+ * Проверяет, что значение относится к объектным типам JavaScript.
1106
+ *
1107
+ * @example
1108
+ * ```typescript
1109
+ * isAnyObject({}) // true
1110
+ * isAnyObject(null) // true
1111
+ * ```
1112
+ */
1113
+ declare const isAnyObject: (param: unknown) => param is object;
1114
+ /**
1115
+ * Проверяет, что значение является "простым" объектом, а не массивом, датой, ошибкой или другой специальной структурой.
1116
+ *
1117
+ * @param param - Значение для проверки
1118
+ * @returns `true`, если значение можно трактовать как обычный объект
1119
+ *
1120
+ * @example
1121
+ * ```typescript
1122
+ * isObject({ id: 1 }) // true
1123
+ * isObject([1, 2, 3]) // false
1124
+ * ```
1125
+ */
1126
+ declare const isObject: <Param = object>(param: unknown) => param is Param;
1127
+ /**
1128
+ * Проверяет, что значение является массивом.
1129
+ *
1130
+ * @example
1131
+ * ```typescript
1132
+ * isArray([1, 2]) // true
1133
+ * isArray({ length: 2 }) // false
1134
+ * ```
1135
+ */
1136
+ declare const isArray: <Param = unknown>(param: unknown) => param is Param[];
1137
+ /**
1138
+ * Проверяет, что значение является `ArrayBuffer`.
1139
+ *
1140
+ * @example
1141
+ * ```typescript
1142
+ * isArrayBuffer(new ArrayBuffer(8)) // true
1143
+ * ```
1144
+ */
1145
+ declare const isArrayBuffer: (param: unknown) => param is ArrayBuffer;
1146
+ /**
1147
+ * Проверяет, что значение является `Map`.
1148
+ *
1149
+ * @example
1150
+ * ```typescript
1151
+ * isMap(new Map()) // true
1152
+ * ```
1153
+ */
1154
+ declare const isMap: (param: unknown) => param is Map<unknown, unknown>;
1155
+ /**
1156
+ * Проверяет, что значение является `Set`.
1157
+ *
1158
+ * @example
1159
+ * ```typescript
1160
+ * isSet(new Set()) // true
1161
+ * ```
1162
+ */
1163
+ declare const isSet: (param: unknown) => param is Set<unknown>;
1164
+ /**
1165
+ * Проверяет, что значение является `WeakMap`.
1166
+ *
1167
+ * @example
1168
+ * ```typescript
1169
+ * isWeakMap(new WeakMap()) // true
1170
+ * ```
1171
+ */
1172
+ declare const isWeakMap: (param: unknown) => param is WeakMap<object, unknown>;
1173
+ /**
1174
+ * Проверяет, что значение является `WeakSet`.
1175
+ *
1176
+ * @example
1177
+ * ```typescript
1178
+ * isWeakSet(new WeakSet()) // true
1179
+ * ```
1180
+ */
1181
+ declare const isWeakSet: (param: unknown) => param is WeakSet<object>;
1182
+ /**
1183
+ * Проверяет, что значение является объектом `Date`.
1184
+ *
1185
+ * @example
1186
+ * ```typescript
1187
+ * isDate(new Date()) // true
1188
+ * ```
1189
+ */
1190
+ declare const isDate: (param: unknown) => param is Error;
1191
+ /**
1192
+ * Проверяет, что значение является экземпляром `Error`.
1193
+ *
1194
+ * @example
1195
+ * ```typescript
1196
+ * isError(new Error('boom')) // true
1197
+ * ```
1198
+ */
1199
+ declare const isError: (param: unknown) => param is Error;
1200
+ /**
1201
+ * Проверяет, что значение является `Proxy`.
1202
+ *
1203
+ * @example
1204
+ * ```typescript
1205
+ * const value = new Proxy({}, {})
1206
+ * isProxy(value) // true
1207
+ * ```
1208
+ */
1209
+ declare const isProxy: (param: unknown) => param is ProxyConstructor;
1210
+ /**
1211
+ * Проверяет, что значение является `RegExp`.
1212
+ *
1213
+ * @example
1214
+ * ```typescript
1215
+ * isRegExp(/test/) // true
1216
+ * ```
1217
+ */
1218
+ declare const isRegExp: (param: unknown) => param is RegExp;
1219
+ /**
1220
+ * Проверяет, что значение является `Promise`.
1221
+ *
1222
+ * @example
1223
+ * ```typescript
1224
+ * isPromise(Promise.resolve()) // true
1225
+ * ```
1226
+ */
1227
+ declare const isPromise: (param: unknown) => param is Promise<typeof param>;
1228
+ /**
1229
+ * Проверяет, что значение является функцией.
1230
+ *
1231
+ * @param param - Значение для проверки
1232
+ * @returns `true`, если значение можно вызвать как функцию
1233
+ *
1234
+ * @example
1235
+ * ```typescript
1236
+ * isFunction(() => true) // true
1237
+ * isFunction('callback') // false
1238
+ * ```
1239
+ */
1240
+ declare const isFunction: <Callback = <ParamList extends BaseList, Result>(...paramList: ParamList) => Result>(param: unknown) => param is Callback;
1241
+
1242
+ export { ErrorHandler, ErrorHandlerEventName, EventEmitter, Log, Storage, chunkList, compose, debounce, filterByKey, filterDuplicateByKey, filterEqualValues, filterNullableValues, forceList, getValueByKey, hasEqualValues, hasKey, isAnyObject, isArray, isArrayBuffer, isArrayEmpty, isBigint, isBoolean, isDate, isError, isFunction, isMap, isNaN, isNull, isNullable, isNumber, isObject, isObjectEmpty, isPromise, isProxy, isRegExp, isSet, isString, isSymbol, isUndefined, isWeakMap, isWeakSet, mapRecord, runCallback, throttle, wait };
1243
+ export type { AnyAsyncCallback, AnyCallback, AsyncCallback, BaseKey, BaseList, BaseRecord, Callback, CallbackParamList, CallbackResult, Decrement, Divide, Entry, ErrorHandlerCaseConfig, ErrorHandlerConfig, ErrorHandlerError, ErrorHandlerErrors, ErrorHandlerEventParams, ErrorHandlerMessage, ErrorHandlerParseResult, Filled, Include, Increment, IterableOf, KeyOf, LevelRange, List, MaybeAsync, Noop, NotNullable, Nothing, Nullable, Numerable, Shared, SizeRange, StorageConfig, StorageInstance, StorageModel, ValueOf };