@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,587 @@
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
+ * Тип, допускающий null или undefined (например для опциональных полей).
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * type MaybeName = Nullable<string> // string | null | undefined
43
+ * ```
44
+ */
45
+ type Nullable<Data = undefined> = Data | NullablePrimitive;
46
+ /**
47
+ * Тип, исключающий null и undefined (гарантированно заданное значение).
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * type Name = NotNullable<string | null | undefined> // string
52
+ * ```
53
+ */
54
+ type NotNullable<Data = undefined> = Exclude<Data, NullablePrimitive>;
55
+ /**
56
+ * Допустимые ключи объекта (как в Record).
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * type Key = BaseKey // string | number | symbol
61
+ * ```
62
+ */
63
+ type BaseKey = string | number | symbol;
64
+ /**
65
+ * Массив элементов (базовый тип для списков).
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * type IdList = BaseList<number> // number[]
70
+ * ```
71
+ */
72
+ type BaseList<Item = unknown> = Item[];
73
+ /**
74
+ * Объект с ключами Key и значениями Value (обобщение Record).
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * type UserMap = BaseRecord<string, 'name' | 'role'>
79
+ * ```
80
+ */
81
+ type BaseRecord<Value = unknown, Key extends BaseKey = BaseKey> = Record<Key, Value>;
82
+ /**
83
+ * Синхронная функция с заданным списком параметров и результатом.
84
+ * @template ParamList - кортеж типов аргументов
85
+ * @template Result - тип возвращаемого значения
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * type Sum = Callback<[number, number], number>
90
+ * ```
91
+ */
92
+ type Callback<ParamList extends BaseList = BaseList, Result = void> = (...paramList: ParamList) => Result;
93
+ /** Любая синхронная функция без ограничений на аргументы и результат. */
94
+ type AnyCallback = Callback<any[], any>;
95
+ /** Извлекает кортеж аргументов из типа функции. */
96
+ type CallbackParamList<Callback> = Callback extends (...args: infer ParamList) => any ? ParamList : never;
97
+
98
+ /**
99
+ * Асинхронная задержка на указанное количество миллисекунд.
100
+ * Удобна для пауз между ретраями, анимациями или батч-обработкой.
101
+ *
102
+ * @param delay - Длительность ожидания в миллисекундах
103
+ * @returns Promise, который выполнится через указанное время
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * await wait(300)
108
+ * ```
109
+ */
110
+ declare const wait: (delay: number) => Promise<unknown>;
111
+ /**
112
+ * Собирает объект из переданного значения и опционального исходного объекта.
113
+ * Поддерживает три сценария: вернуть объект как есть, слить два объекта или записать примитив по ключу.
114
+ *
115
+ * @param value - Объект целиком или значение для поля
116
+ * @param data - Исходный объект для объединения
117
+ * @param key - Ключ, в который нужно записать примитивное значение
118
+ * @returns Новый объект с объединёнными данными
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * compose({ name: 'John' }) // { name: 'John' }
123
+ * compose({ age: 18 }, { name: 'John' }) // { name: 'John', age: 18 }
124
+ * compose('John', { age: 18 }, 'name') // { age: 18, name: 'John' }
125
+ * ```
126
+ */
127
+ declare function compose<Data extends object, Value extends Data>(value: Value): Value;
128
+ declare function compose<Data extends object, Value extends Data>(value: Value, data: Data): Data & Value;
129
+ 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;
130
+ /**
131
+ * Возвращает значение объекта по ключу.
132
+ * Если ключ отсутствует или равен null/undefined, может вернуть значение по умолчанию.
133
+ *
134
+ * @param key - Ключ поля
135
+ * @param data - Объект-источник
136
+ * @param defaultValue - Резервное значение, если ключ не задан или значение отсутствует
137
+ * @returns Значение по ключу или defaultValue
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * getValueByKey('name', { name: 'John' }) // 'John'
142
+ * getValueByKey('age', { name: 'John' }, 18) // 18
143
+ * ```
144
+ */
145
+ declare function getValueByKey<Value, Key extends BaseKey>(key: Key, data: BaseRecord<Value, Key>): Value;
146
+ declare function getValueByKey<Value, Key extends BaseKey, DefaultValue>(key: Nullable<Key>, data: Partial<BaseRecord<Value, Key>>, defaultValue: DefaultValue): Value | DefaultValue;
147
+ /**
148
+ * Преобразует значения объекта, сохраняя его исходные ключи.
149
+ *
150
+ * @param data - Объект, который нужно обойти
151
+ * @param callback - Функция преобразования значения
152
+ * @returns Новый объект с теми же ключами и результатами callback
153
+ *
154
+ * @example
155
+ * ```typescript
156
+ * mapRecord({ a: 1, b: 2 }, (_, value) => value * 2) // { a: 2, b: 4 }
157
+ * ```
158
+ */
159
+ 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;
160
+ /**
161
+ * Безопасно вызывает callback, если передано действительно вызываемое значение.
162
+ *
163
+ * @param callback - Функция для вызова
164
+ * @param paramList - Аргументы, которые будут переданы в callback
165
+ * @returns Результат callback или undefined, если callback не является функцией
166
+ *
167
+ * @example
168
+ * ```typescript
169
+ * runCallback((name: string) => `Hello, ${name}`, 'John') // 'Hello, John'
170
+ * runCallback(undefined, 'John') // undefined
171
+ * ```
172
+ */
173
+ declare const runCallback: <Callback, Result = Callback extends AnyCallback ? ReturnType<Callback> : void>(callback: Callback, ...paramList: CallbackParamList<Callback>) => Result;
174
+
175
+ /**
176
+ * Создаёт функцию с отложенным вызовом callback.
177
+ * Повторный вызов до истечения delay сбрасывает предыдущий таймер.
178
+ *
179
+ * @param callback - Функция, которую нужно вызывать с задержкой
180
+ * @param delay - Задержка в миллисекундах
181
+ * @returns Обёртка с debounce-поведением
182
+ *
183
+ * @example
184
+ * ```typescript
185
+ * const save = debounce(() => api.save(), 300)
186
+ * input.addEventListener('input', save)
187
+ * ```
188
+ */
189
+ declare const debounce: <Callback>(callback: Callback, delay: number) => (...params: CallbackParamList<Callback>) => void;
190
+ /**
191
+ * Создаёт функцию, которая допускает не более одного вызова за период delay.
192
+ *
193
+ * @param callback - Функция, которую нужно ограничить по частоте вызовов
194
+ * @param delay - Интервал блокировки в миллисекундах
195
+ * @returns Обёртка с throttle-поведением
196
+ *
197
+ * @example
198
+ * ```typescript
199
+ * const onScroll = throttle(() => console.log('scroll'), 100)
200
+ * window.addEventListener('scroll', onScroll)
201
+ * ```
202
+ */
203
+ declare const throttle: <Callback>(callback: Callback, delay: number) => (...params: CallbackParamList<Callback>) => void;
204
+
205
+ /**
206
+ * Фильтрует список объектов по булевому полю.
207
+ * Если у элемента нет указанного ключа, такой элемент сохраняется.
208
+ *
209
+ * @param list - Исходный список объектов
210
+ * @param key - Булево поле для фильтрации, по умолчанию `isVisible`
211
+ * @returns Новый список, содержащий только подходящие элементы
212
+ *
213
+ * @example
214
+ * ```typescript
215
+ * filterByKey([{ isVisible: true }, { isVisible: false }]) // [{ isVisible: true }]
216
+ * ```
217
+ */
218
+ declare function filterByKey<Key extends KeyOf<Item>, Item extends object & BaseRecord<boolean, Key>>(list: Item[], key?: Key): Item[];
219
+ /**
220
+ * Удаляет дубликаты из списка объектов по значению указанного ключа.
221
+ *
222
+ * @param data - Список объектов
223
+ * @param key - Ключ, по которому определяется уникальность
224
+ * @returns Новый список без повторяющихся значений key
225
+ *
226
+ * @example
227
+ * ```typescript
228
+ * filterDuplicateByKey([{ id: 1 }, { id: 1 }, { id: 2 }], 'id') // [{ id: 1 }, { id: 2 }]
229
+ * ```
230
+ */
231
+ declare function filterDuplicateByKey<Key extends BaseKey, Item extends object & BaseRecord<any, Key>>(data: Item[], key: Key): Item[];
232
+ /**
233
+ * Возвращает элементы первого списка, которые присутствуют во втором.
234
+ *
235
+ * @param inputList - Список для проверки
236
+ * @param list - Список значений, с которыми нужно сравнить
237
+ * @returns Пересечение двух списков
238
+ *
239
+ * @example
240
+ * ```typescript
241
+ * filterEqualValues([1, 2, 3], [2, 4]) // [2]
242
+ * ```
243
+ */
244
+ declare function filterEqualValues<Item>(inputList: Item[], list: Item[]): Item[];
245
+ /**
246
+ * Удаляет из списка `null` и `undefined`, одновременно сужая тип результата.
247
+ *
248
+ * @param list - Исходный список
249
+ * @returns Список только с непустыми значениями
250
+ *
251
+ * @example
252
+ * ```typescript
253
+ * filterNullableValues([1, null, 2, undefined]) // [1, 2]
254
+ * ```
255
+ */
256
+ declare function filterNullableValues<Item>(list: Item[]): NotNullable<Item>[];
257
+
258
+ /**
259
+ * Проверяет, что объект не содержит перечисляемых свойств.
260
+ *
261
+ * @param object - Объект для проверки
262
+ * @returns `true`, если объект пустой
263
+ *
264
+ * @example
265
+ * ```typescript
266
+ * isObjectEmpty({}) // true
267
+ * isObjectEmpty({ id: 1 }) // false
268
+ * ```
269
+ */
270
+ declare function isObjectEmpty<Param extends object>(object: Param): boolean;
271
+ /**
272
+ * Проверяет, что массив не содержит элементов.
273
+ *
274
+ * @param array - Массив для проверки
275
+ * @returns `true`, если массив пустой
276
+ *
277
+ * @example
278
+ * ```typescript
279
+ * isArrayEmpty([]) // true
280
+ * isArrayEmpty([1]) // false
281
+ * ```
282
+ */
283
+ declare function isArrayEmpty<Param extends BaseList>(array: Param): boolean;
284
+ /**
285
+ * Проверяет наличие ключа в объекте и сужает тип data при успешной проверке.
286
+ *
287
+ * @param key - Ключ, наличие которого нужно проверить
288
+ * @param data - Значение, которое предполагается объектом
289
+ * @returns `true`, если ключ существует в объекте
290
+ *
291
+ * @example
292
+ * ```typescript
293
+ * if (hasKey('name', payload)) {
294
+ * console.log(payload.name)
295
+ * }
296
+ * ```
297
+ */
298
+ declare function hasKey<Key extends BaseKey, Data, Value>(key: Key, data: Data): data is Data & BaseRecord<Value, Key>;
299
+ /**
300
+ * Проверяет, есть ли у двух списков хотя бы одно общее значение.
301
+ *
302
+ * @param inputList - Первый список
303
+ * @param list - Второй список
304
+ * @returns `true`, если найдено хотя бы одно совпадение
305
+ *
306
+ * @example
307
+ * ```typescript
308
+ * hasEqualValues(['a', 'b'], ['c', 'b']) // true
309
+ * hasEqualValues(['a'], ['c']) // false
310
+ * ```
311
+ */
312
+ declare function hasEqualValues<Item>(inputList: Item[], list: Item[]): boolean;
313
+
314
+ /**
315
+ * Приводит значение к массиву: если передано одно значение — возвращает массив из одного элемента,
316
+ * если передан массив — возвращает его без изменений.
317
+ * Удобно для API, которые могут принимать как один элемент, так и массив.
318
+ *
319
+ * @param param - Один элемент или массив элементов
320
+ * @returns Массив элементов (всегда массив)
321
+ *
322
+ * @example
323
+ * ```typescript
324
+ * forceList(1) // [1]
325
+ * forceList([1, 2]) // [1, 2]
326
+ * ```
327
+ *
328
+ * @example
329
+ * ```typescript
330
+ * const ids = forceList(query.id) // query.id: string | string[]
331
+ * ids.forEach(processId)
332
+ * ```
333
+ */
334
+ declare function forceList<Item>(param: Item | Item[]): Item[];
335
+ /**
336
+ * Разбивает массив на подмассивы заданного размера (чанки).
337
+ * Последний чанк может быть меньше size, если длина массива не кратна size.
338
+ *
339
+ * @param list - Исходный массив
340
+ * @param size - Размер одного чанка (целое положительное число)
341
+ * @returns Массив чанков (массив массивов)
342
+ *
343
+ * @example
344
+ * ```typescript
345
+ * chunkList([1, 2, 3, 4, 5], 2) // [[1, 2], [3, 4], [5]]
346
+ * chunkList([], 3) // []
347
+ * ```
348
+ *
349
+ * @example
350
+ * ```typescript
351
+ * const pages = chunkList(items, PAGE_SIZE)
352
+ * for (const page of pages) {
353
+ * await saveBatch(page)
354
+ * }
355
+ * ```
356
+ */
357
+ declare function chunkList<Item>(list: Item[], size: number): Item[][];
358
+
359
+ /**
360
+ * Проверяет, что значение равно `undefined`.
361
+ *
362
+ * @example
363
+ * ```typescript
364
+ * isUndefined(undefined) // true
365
+ * isUndefined(null) // false
366
+ * ```
367
+ */
368
+ declare const isUndefined: (param: unknown) => param is undefined;
369
+ /**
370
+ * Проверяет, что значение равно `null`.
371
+ *
372
+ * @example
373
+ * ```typescript
374
+ * isNull(null) // true
375
+ * isNull(undefined) // false
376
+ * ```
377
+ */
378
+ declare const isNull: (param: unknown) => param is null;
379
+ /**
380
+ * Проверяет, что значение равно `null` или `undefined`.
381
+ *
382
+ * @example
383
+ * ```typescript
384
+ * isNullable(undefined) // true
385
+ * isNullable('value') // false
386
+ * ```
387
+ */
388
+ declare const isNullable: (param: unknown) => param is Nullable;
389
+ /**
390
+ * Проверяет, что значение имеет тип `string`.
391
+ *
392
+ * @example
393
+ * ```typescript
394
+ * isString('hello') // true
395
+ * isString(42) // false
396
+ * ```
397
+ */
398
+ declare const isString: (param: unknown) => param is string;
399
+ /**
400
+ * Проверяет, что значение имеет тип `number`.
401
+ *
402
+ * @example
403
+ * ```typescript
404
+ * isNumber(42) // true
405
+ * isNumber('42') // false
406
+ * ```
407
+ */
408
+ declare const isNumber: (param: unknown) => param is number;
409
+ /**
410
+ * Проверяет, что значение имеет тип `bigint`.
411
+ *
412
+ * @example
413
+ * ```typescript
414
+ * isBigint(10n) // true
415
+ * isBigint(10) // false
416
+ * ```
417
+ */
418
+ declare const isBigint: (param: unknown) => param is bigint;
419
+ /**
420
+ * Проверяет, что значение является `NaN`.
421
+ *
422
+ * @example
423
+ * ```typescript
424
+ * isNaN(Number('foo')) // true
425
+ * isNaN(10) // false
426
+ * ```
427
+ */
428
+ declare const isNaN: (param: unknown) => param is number;
429
+ /**
430
+ * Проверяет, что значение имеет тип `boolean`.
431
+ *
432
+ * @example
433
+ * ```typescript
434
+ * isBoolean(true) // true
435
+ * isBoolean(0) // false
436
+ * ```
437
+ */
438
+ declare const isBoolean: (param: unknown) => param is boolean;
439
+ /**
440
+ * Проверяет, что значение имеет тип `symbol`.
441
+ *
442
+ * @example
443
+ * ```typescript
444
+ * isSymbol(Symbol('id')) // true
445
+ * isSymbol('id') // false
446
+ * ```
447
+ */
448
+ declare const isSymbol: (param: unknown) => param is symbol;
449
+ /**
450
+ * Проверяет, что значение относится к объектным типам JavaScript.
451
+ *
452
+ * @example
453
+ * ```typescript
454
+ * isAnyObject({}) // true
455
+ * isAnyObject(null) // true
456
+ * ```
457
+ */
458
+ declare const isAnyObject: (param: unknown) => param is object;
459
+ /**
460
+ * Проверяет, что значение является "простым" объектом, а не массивом, датой, ошибкой или другой специальной структурой.
461
+ *
462
+ * @param param - Значение для проверки
463
+ * @returns `true`, если значение можно трактовать как обычный объект
464
+ *
465
+ * @example
466
+ * ```typescript
467
+ * isObject({ id: 1 }) // true
468
+ * isObject([1, 2, 3]) // false
469
+ * ```
470
+ */
471
+ declare const isObject: <Param = object>(param: unknown) => param is Param;
472
+ /**
473
+ * Проверяет, что значение является массивом.
474
+ *
475
+ * @example
476
+ * ```typescript
477
+ * isArray([1, 2]) // true
478
+ * isArray({ length: 2 }) // false
479
+ * ```
480
+ */
481
+ declare const isArray: <Param = unknown>(param: unknown) => param is Param[];
482
+ /**
483
+ * Проверяет, что значение является `ArrayBuffer`.
484
+ *
485
+ * @example
486
+ * ```typescript
487
+ * isArrayBuffer(new ArrayBuffer(8)) // true
488
+ * ```
489
+ */
490
+ declare const isArrayBuffer: (param: unknown) => param is ArrayBuffer;
491
+ /**
492
+ * Проверяет, что значение является `Map`.
493
+ *
494
+ * @example
495
+ * ```typescript
496
+ * isMap(new Map()) // true
497
+ * ```
498
+ */
499
+ declare const isMap: (param: unknown) => param is Map<unknown, unknown>;
500
+ /**
501
+ * Проверяет, что значение является `Set`.
502
+ *
503
+ * @example
504
+ * ```typescript
505
+ * isSet(new Set()) // true
506
+ * ```
507
+ */
508
+ declare const isSet: (param: unknown) => param is Set<unknown>;
509
+ /**
510
+ * Проверяет, что значение является `WeakMap`.
511
+ *
512
+ * @example
513
+ * ```typescript
514
+ * isWeakMap(new WeakMap()) // true
515
+ * ```
516
+ */
517
+ declare const isWeakMap: (param: unknown) => param is WeakMap<object, unknown>;
518
+ /**
519
+ * Проверяет, что значение является `WeakSet`.
520
+ *
521
+ * @example
522
+ * ```typescript
523
+ * isWeakSet(new WeakSet()) // true
524
+ * ```
525
+ */
526
+ declare const isWeakSet: (param: unknown) => param is WeakSet<object>;
527
+ /**
528
+ * Проверяет, что значение является объектом `Date`.
529
+ *
530
+ * @example
531
+ * ```typescript
532
+ * isDate(new Date()) // true
533
+ * ```
534
+ */
535
+ declare const isDate: (param: unknown) => param is Error;
536
+ /**
537
+ * Проверяет, что значение является экземпляром `Error`.
538
+ *
539
+ * @example
540
+ * ```typescript
541
+ * isError(new Error('boom')) // true
542
+ * ```
543
+ */
544
+ declare const isError: (param: unknown) => param is Error;
545
+ /**
546
+ * Проверяет, что значение является `Proxy`.
547
+ *
548
+ * @example
549
+ * ```typescript
550
+ * const value = new Proxy({}, {})
551
+ * isProxy(value) // true
552
+ * ```
553
+ */
554
+ declare const isProxy: (param: unknown) => param is ProxyConstructor;
555
+ /**
556
+ * Проверяет, что значение является `RegExp`.
557
+ *
558
+ * @example
559
+ * ```typescript
560
+ * isRegExp(/test/) // true
561
+ * ```
562
+ */
563
+ declare const isRegExp: (param: unknown) => param is RegExp;
564
+ /**
565
+ * Проверяет, что значение является `Promise`.
566
+ *
567
+ * @example
568
+ * ```typescript
569
+ * isPromise(Promise.resolve()) // true
570
+ * ```
571
+ */
572
+ declare const isPromise: (param: unknown) => param is Promise<typeof param>;
573
+ /**
574
+ * Проверяет, что значение является функцией.
575
+ *
576
+ * @param param - Значение для проверки
577
+ * @returns `true`, если значение можно вызвать как функцию
578
+ *
579
+ * @example
580
+ * ```typescript
581
+ * isFunction(() => true) // true
582
+ * isFunction('callback') // false
583
+ * ```
584
+ */
585
+ declare const isFunction: <Callback = <ParamList extends BaseList, Result>(...paramList: ParamList) => Result>(param: unknown) => param is Callback;
586
+
587
+ export { 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 };
@@ -0,0 +1 @@
1
+ const n=n=>void 0===n,t=n=>null===n,e=e=>n(e)||t(e),r=n=>"string"==typeof n,o=n=>"number"==typeof n,i=n=>"bigint"==typeof n,u=n=>Number.isNaN(n),c=n=>"boolean"==typeof n,f=n=>"symbol"==typeof n,s=n=>"object"==typeof n,a=n=>{const t=[l,m,p,y,b,g,h,j,d,x,A].some(t=>t(n));return!!n&&"object"==typeof n&&!t},l=n=>Array.isArray(n),m=n=>n instanceof ArrayBuffer,p=n=>n instanceof Map,y=n=>n instanceof Set,b=n=>n instanceof Map,g=n=>n instanceof Set,h=n=>n instanceof Date,j=n=>n instanceof Error,T=n=>n instanceof Proxy,d=n=>n instanceof RegExp,x=n=>n instanceof Promise,A=n=>n instanceof Function,E=n=>new Promise(t=>setTimeout(t,n));function N(n,t,r){const o=!a(n);return!e(r)&&{...t,...o?{[r]:n}:n}||!e(t)&&{...t,...n}||{...n}}function P(n,t,r){return e(n)?r:2===arguments.length?t[n]:t[n]??r}const M=(n,t)=>{const e=Object.entries(n);return Object.fromEntries(e.map(([n,e],r,o)=>[n,t(n,e,r,o)]))},O=(n,...t)=>{if(A(n))return n(...t)},S=(n,t)=>{let e;return(...r)=>{e&&clearTimeout(e),e=setTimeout(()=>O(n,...r),t)}},v=(n,t)=>{let e=!0;return(...r)=>{e&&(O(n,...r),e=!1),setTimeout(()=>e=!0,t)}};function w(n){for(const t in n)return!1;return!0}function B(n){return 0===n.length}function D(n,t){return!(!s(t)||!(n in t))}function F(n,t){return!!k(n,t).length}function R(n,t="isVisible"){return n.filter(n=>!D(t,n)||n[t])}function V(n,t){return n.reduce((n,e)=>n.some(n=>n[t]===e[t])?n:[...n,e],[])}function k(n,t){return n.filter(n=>t.includes(n))}function q(n){return n.filter(n=>!e(n))}function z(n){return l(n)?n:[n]}function C(n,t){const e=[];for(let r=0;r<n.length;r+=t)e.push(n.slice(r,r+t));return e}export{C as chunkList,N as compose,S as debounce,R as filterByKey,V as filterDuplicateByKey,k as filterEqualValues,q as filterNullableValues,z as forceList,P as getValueByKey,F as hasEqualValues,D as hasKey,s as isAnyObject,l as isArray,m as isArrayBuffer,B as isArrayEmpty,i as isBigint,c as isBoolean,h as isDate,j as isError,A as isFunction,p as isMap,u as isNaN,t as isNull,e as isNullable,o as isNumber,a as isObject,w as isObjectEmpty,x as isPromise,T as isProxy,d as isRegExp,y as isSet,r as isString,f as isSymbol,n as isUndefined,b as isWeakMap,g as isWeakSet,M as mapRecord,O as runCallback,v as throttle,E as wait};
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "private": false,
3
+ "version": "0.0.1",
4
+ "name": "@mediacubeco/base",
5
+ "description": "Base by Mediacube developers",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "keywords": [
12
+ "mediacube",
13
+ "mediacubeco",
14
+ "base"
15
+ ],
16
+ "devDependencies": {
17
+ "eslint": "^9.39.1",
18
+ "prettier": "^3.8.1",
19
+ "typescript": "^5.9.3",
20
+ "@mediacubeco/prettier-config": "0.0.1",
21
+ "@mediacubeco/eslint-config": "0.0.1",
22
+ "@mediacubeco/typescript-config": "0.0.1"
23
+ },
24
+ "exports": {
25
+ ".": {
26
+ "import": "./dist/index.mjs",
27
+ "require": "./dist/index.cjs",
28
+ "types": "./dist/index.d.ts"
29
+ },
30
+ "./helpers": {
31
+ "require": "./dist/helpers/index.cjs",
32
+ "import": "./dist/helpers/index.mjs",
33
+ "types": "./dist/helpers/index.d.ts"
34
+ },
35
+ "./services": {
36
+ "import": "./dist/services/index.mjs",
37
+ "require": "./dist/services/index.cjs",
38
+ "types": "./dist/services/index.d.ts"
39
+ },
40
+ "./types": {
41
+ "import": "./dist/types/index.mjs",
42
+ "require": "./dist/types/index.cjs",
43
+ "types": "./dist/types/index.d.ts"
44
+ },
45
+ "./utils": {
46
+ "import": "./dist/utils/index.mjs",
47
+ "require": "./dist/utils/index.cjs",
48
+ "types": "./dist/utils/index.d.ts"
49
+ }
50
+ }
51
+ }