@ocavue/utils 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -11,35 +11,68 @@ declare function isMap(value: unknown): value is Map<unknown, unknown>;
11
11
  * Checks if the given value is a Set.
12
12
  */
13
13
  declare function isSet(value: unknown): value is Set<unknown>;
14
- //#endregion
15
- //#region src/default-map.d.ts
16
- /**
17
- * A map that automatically creates values for missing keys using a factory function.
18
- *
19
- * Similar to Python's [defaultdict](https://docs.python.org/3.13/library/collections.html#collections.defaultdict).
20
- */
21
- declare class DefaultMap<K$1, V> extends Map<K$1, V> {
22
- private readonly defaultFactory;
23
- constructor(defaultFactory: () => V, iterable?: Iterable<readonly [K$1, V]>);
24
- get(key: K$1): V;
25
- }
26
14
  /**
27
- * A weak map that automatically creates values for missing keys using a factory function.
28
- *
29
- * Similar to DefaultMap but uses WeakMap as the base, allowing garbage collection of keys.
15
+ * Returns true if the given value is not null or undefined.
30
16
  */
31
- declare class DefaultWeakMap<K$1 extends WeakKey, V> extends WeakMap<K$1, V> {
32
- private readonly defaultFactory;
33
- constructor(defaultFactory: () => V, entries?: readonly (readonly [K$1, V])[] | null);
34
- get(key: K$1): V;
35
- }
17
+ declare function isNotNullish<T>(value: T): value is NonNullable<T>;
18
+ //#endregion
19
+ //#region src/counter.d.ts
36
20
  /**
37
21
  * A map that counts occurrences of keys.
38
22
  *
39
- * Similar to Python's [Counter](https://docs.python.org/3.13/library/collections.html#collections.Counter).
23
+ * @example
24
+ * ```typescript
25
+ * // Count word occurrences
26
+ * const wordCounter = new Counter<string>()
27
+ * const words = ['apple', 'banana', 'apple', 'cherry', 'banana', 'apple']
28
+ *
29
+ * for (const word of words) {
30
+ * wordCounter.increment(word)
31
+ * }
32
+ *
33
+ * console.log(wordCounter.get('apple')) // 3
34
+ * console.log(wordCounter.get('banana')) // 2
35
+ * console.log(wordCounter.get('cherry')) // 1
36
+ * console.log(wordCounter.get('orange')) // 0 (defaults to 0)
37
+ * ```
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * // Initialize with existing counts
42
+ * const counter = new Counter<string>([
43
+ * ['red', 5],
44
+ * ['blue', 3],
45
+ * ['green', 7]
46
+ * ])
47
+ *
48
+ * counter.increment('red', 2) // red: 5 -> 7
49
+ * counter.decrement('blue') // blue: 3 -> 2
50
+ * counter.increment('yellow') // yellow: 0 -> 1
51
+ *
52
+ * console.log(counter.get('red')) // 7
53
+ * console.log(counter.get('blue')) // 2
54
+ * console.log(counter.get('yellow')) // 1
55
+ * ```
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * // Track event frequencies
60
+ * const eventCounter = new Counter<string>()
61
+ *
62
+ * eventCounter.increment('click', 5)
63
+ * eventCounter.increment('hover', 3)
64
+ * eventCounter.increment('click', 2)
65
+ *
66
+ * // Get most common events
67
+ * const events = [...eventCounter.entries()]
68
+ * .sort((a, b) => b[1] - a[1])
69
+ *
70
+ * console.log(events) // [['click', 7], ['hover', 3]]
71
+ * ```
40
72
  */
41
- declare class Counter<K$1> extends DefaultMap<K$1, number> {
73
+ declare class Counter<K$1> extends Map<K$1, number> {
42
74
  constructor(iterable?: Iterable<readonly [K$1, number]>);
75
+ get(key: K$1): number;
43
76
  /**
44
77
  * Increments the count for a key by a given amount (default 1).
45
78
  */
@@ -52,10 +85,72 @@ declare class Counter<K$1> extends DefaultMap<K$1, number> {
52
85
  /**
53
86
  * A weak map that counts occurrences of object keys.
54
87
  *
55
- * Similar to Counter but uses WeakMap as the base, allowing garbage collection of keys.
88
+ * Similar to {@link Counter} but uses WeakMap as the base, allowing garbage collection of keys.
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * // Track reference counts for DOM elements
93
+ * const elementRefs = new WeakCounter<HTMLElement>()
94
+ *
95
+ * function addReference(element: HTMLElement) {
96
+ * elementRefs.increment(element)
97
+ * console.log(`References: ${elementRefs.get(element)}`)
98
+ * }
99
+ *
100
+ * function removeReference(element: HTMLElement) {
101
+ * elementRefs.decrement(element)
102
+ * console.log(`References: ${elementRefs.get(element)}`)
103
+ * }
104
+ *
105
+ * const div = document.createElement('div')
106
+ * addReference(div) // References: 1
107
+ * addReference(div) // References: 2
108
+ * removeReference(div) // References: 1
109
+ * ```
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * // Count object interactions without preventing garbage collection
114
+ * const objectInteractions = new WeakCounter<object>()
115
+ *
116
+ * function handleInteraction(obj: object, count = 1) {
117
+ * objectInteractions.increment(obj, count)
118
+ * }
119
+ *
120
+ * const user = { id: 1, name: 'Alice' }
121
+ * const session = { sessionId: 'abc123' }
122
+ *
123
+ * handleInteraction(user, 3)
124
+ * handleInteraction(session, 1)
125
+ * handleInteraction(user, 2)
126
+ *
127
+ * console.log(objectInteractions.get(user)) // 5
128
+ * console.log(objectInteractions.get(session)) // 1
129
+ * // When user and session are no longer referenced elsewhere,
130
+ * // they can be garbage collected along with their counts
131
+ * ```
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * // Initialize with existing counts
136
+ * const cache1 = {}
137
+ * const cache2 = {}
138
+ * const cache3 = {}
139
+ *
140
+ * const hitCounter = new WeakCounter<object>([
141
+ * [cache1, 10],
142
+ * [cache2, 5],
143
+ * [cache3, 15]
144
+ * ])
145
+ *
146
+ * hitCounter.increment(cache1, 3) // 10 -> 13
147
+ * console.log(hitCounter.get(cache1)) // 13
148
+ * console.log(hitCounter.get(cache2)) // 5
149
+ * ```
56
150
  */
57
- declare class WeakCounter<K$1 extends WeakKey> extends DefaultWeakMap<K$1, number> {
151
+ declare class WeakCounter<K$1 extends WeakKey> extends WeakMap<K$1, number> {
58
152
  constructor(entries?: readonly (readonly [K$1, number])[] | null);
153
+ get(key: K$1): number;
59
154
  /**
60
155
  * Increments the count for a key by a given amount (default 1).
61
156
  */
@@ -66,6 +161,176 @@ declare class WeakCounter<K$1 extends WeakKey> extends DefaultWeakMap<K$1, numbe
66
161
  decrement(key: K$1, amount?: number): void;
67
162
  }
68
163
  //#endregion
164
+ //#region src/default-map.d.ts
165
+ /**
166
+ * A map that automatically creates values for missing keys using a factory function.
167
+ *
168
+ * Similar to Python's [defaultdict](https://docs.python.org/3.13/library/collections.html#collections.defaultdict).
169
+ *
170
+ * @example
171
+ * ```typescript
172
+ * // Group items by category using arrays
173
+ * const groupByCategory = new DefaultMap<string, string[]>(() => [])
174
+ *
175
+ * groupByCategory.get('fruits').push('apple', 'banana')
176
+ * groupByCategory.get('vegetables').push('carrot')
177
+ * groupByCategory.get('fruits').push('orange')
178
+ *
179
+ * console.log(groupByCategory.get('fruits')) // ['apple', 'banana', 'orange']
180
+ * console.log(groupByCategory.get('vegetables')) // ['carrot']
181
+ * console.log(groupByCategory.get('dairy')) // [] (auto-created)
182
+ * ```
183
+ *
184
+ * @example
185
+ * ```typescript
186
+ * // Build a graph with adjacency lists
187
+ * const graph = new DefaultMap<string, Set<string>>(() => new Set())
188
+ *
189
+ * graph.get('A').add('B').add('C')
190
+ * graph.get('B').add('C').add('D')
191
+ * graph.get('C').add('D')
192
+ *
193
+ * console.log([...graph.get('A')]) // ['B', 'C']
194
+ * console.log([...graph.get('B')]) // ['C', 'D']
195
+ * console.log([...graph.get('E')]) // [] (auto-created empty set)
196
+ * ```
197
+ *
198
+ * @example
199
+ * ```typescript
200
+ * // Initialize with existing entries
201
+ * const scores = new DefaultMap<string, number>(
202
+ * () => 0,
203
+ * [
204
+ * ['Alice', 100],
205
+ * ['Bob', 85]
206
+ * ]
207
+ * )
208
+ *
209
+ * scores.set('Alice', scores.get('Alice') + 10) // 100 -> 110
210
+ * console.log(scores.get('Alice')) // 110
211
+ * console.log(scores.get('Bob')) // 85
212
+ * console.log(scores.get('Charlie')) // 0 (auto-created)
213
+ * ```
214
+ *
215
+ * @example
216
+ * ```typescript
217
+ * // Nested DefaultMaps for 2D data structures
218
+ * const matrix = new DefaultMap<number, DefaultMap<number, number>>(
219
+ * () => new DefaultMap<number, number>(() => 0)
220
+ * )
221
+ *
222
+ * matrix.get(0).set(0, 1)
223
+ * matrix.get(0).set(1, 2)
224
+ * matrix.get(1).set(1, 3)
225
+ *
226
+ * console.log(matrix.get(0).get(0)) // 1
227
+ * console.log(matrix.get(0).get(1)) // 2
228
+ * console.log(matrix.get(1).get(0)) // 0 (auto-created)
229
+ * console.log(matrix.get(2).get(3)) // 0 (both auto-created)
230
+ * ```
231
+ */
232
+ declare class DefaultMap<K$1, V> extends Map<K$1, V> {
233
+ private readonly defaultFactory;
234
+ constructor(defaultFactory: () => V, iterable?: Iterable<readonly [K$1, V]>);
235
+ get(key: K$1): V;
236
+ }
237
+ /**
238
+ * A weak map that automatically creates values for missing keys using a factory function.
239
+ *
240
+ * Similar to {@link DefaultMap} but uses WeakMap as the base, allowing garbage collection of keys.
241
+ *
242
+ * @example
243
+ * ```typescript
244
+ * // Store metadata for DOM elements without preventing garbage collection
245
+ * const elementMetadata = new DefaultWeakMap<HTMLElement, { clicks: number; hovers: number }>(
246
+ * () => ({ clicks: 0, hovers: 0 })
247
+ * )
248
+ *
249
+ * const button = document.querySelector('button')!
250
+ * const div = document.querySelector('div')!
251
+ *
252
+ * elementMetadata.get(button).clicks++
253
+ * elementMetadata.get(button).clicks++
254
+ * elementMetadata.get(div).hovers++
255
+ *
256
+ * console.log(elementMetadata.get(button)) // { clicks: 2, hovers: 0 }
257
+ * console.log(elementMetadata.get(div)) // { clicks: 0, hovers: 1 }
258
+ * // When elements are removed from DOM and not referenced,
259
+ * // their metadata can be garbage collected
260
+ * ```
261
+ *
262
+ * @example
263
+ * ```typescript
264
+ * // Cache computed properties for objects
265
+ * const computedCache = new DefaultWeakMap<object, Map<string, any>>(
266
+ * () => new Map()
267
+ * )
268
+ *
269
+ * function getOrCompute(obj: object, key: string, compute: () => any) {
270
+ * const cache = computedCache.get(obj)
271
+ * if (!cache.has(key)) {
272
+ * cache.set(key, compute())
273
+ * }
274
+ * return cache.get(key)
275
+ * }
276
+ *
277
+ * const user = { name: 'Alice', age: 30 }
278
+ * const displayName = getOrCompute(user, 'displayName', () => user.name.toUpperCase())
279
+ * const birthYear = getOrCompute(user, 'birthYear', () => new Date().getFullYear() - user.age)
280
+ *
281
+ * console.log(displayName) // 'ALICE'
282
+ * console.log(birthYear) // 1994 (or current year - 30)
283
+ * ```
284
+ *
285
+ * @example
286
+ * ```typescript
287
+ * // Initialize with existing entries
288
+ * const obj1 = {}
289
+ * const obj2 = {}
290
+ *
291
+ * const objectData = new DefaultWeakMap<object, string[]>(
292
+ * () => [],
293
+ * [
294
+ * [obj1, ['tag1', 'tag2']],
295
+ * [obj2, ['tag3']]
296
+ * ]
297
+ * )
298
+ *
299
+ * objectData.get(obj1).push('tag4')
300
+ * console.log(objectData.get(obj1)) // ['tag1', 'tag2', 'tag4']
301
+ * console.log(objectData.get(obj2)) // ['tag3']
302
+ *
303
+ * const obj3 = {}
304
+ * console.log(objectData.get(obj3)) // [] (auto-created)
305
+ * ```
306
+ *
307
+ * @example
308
+ * ```typescript
309
+ * // Track event listeners per element using both DefaultWeakMap and DefaultMap
310
+ * const eventListeners = new DefaultWeakMap<EventTarget, DefaultMap<string, Function[]>>(
311
+ * () => new DefaultMap<string, Function[]>(() => [])
312
+ * )
313
+ *
314
+ * function addListener(target: EventTarget, event: string, handler: Function) {
315
+ * eventListeners.get(target).get(event).push(handler)
316
+ * }
317
+ *
318
+ * const element = document.createElement('button')
319
+ * addListener(element, 'click', () => console.log('clicked'))
320
+ * addListener(element, 'click', () => console.log('also clicked'))
321
+ * addListener(element, 'hover', () => console.log('hovered'))
322
+ *
323
+ * console.log(eventListeners.get(element).get('click').length) // 2
324
+ * console.log(eventListeners.get(element).get('hover').length) // 1
325
+ * // No need for has() checks or null assertions - everything auto-initializes!
326
+ * ```
327
+ */
328
+ declare class DefaultWeakMap<K$1 extends WeakKey, V> extends WeakMap<K$1, V> {
329
+ private readonly defaultFactory;
330
+ constructor(defaultFactory: () => V, entries?: readonly (readonly [K$1, V])[] | null);
331
+ get(key: K$1): V;
332
+ }
333
+ //#endregion
69
334
  //#region src/dom.d.ts
70
335
  /**
71
336
  * Checks if the given DOM node is an Element.
@@ -148,11 +413,11 @@ declare function isDeepEqual(a: unknown, b: unknown): boolean;
148
413
  //#endregion
149
414
  //#region src/map-group-by.d.ts
150
415
  /**
151
- * A polyfill for the `Map.groupBy` static method.
416
+ * A polyfill for the [`Map.groupBy()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/groupBy) static method.
152
417
  *
153
418
  * @public
154
419
  */
155
- declare const mapGroupBy: <K$1, T>(items: Iterable<T>, keySelector: (item: T, index: number) => K$1) => Map<K$1, T[]>;
420
+ declare function mapGroupBy<K$1, T>(items: Iterable<T>, keySelector: (item: T, index: number) => K$1): Map<K$1, T[]>;
156
421
  //#endregion
157
422
  //#region src/map-values.d.ts
158
423
  /**
@@ -207,13 +472,16 @@ declare function mapValues<ValueIn, ValueOut>(object: Record<string, ValueIn>, c
207
472
  */
208
473
  type ObjectEntries<T extends Record<string, any>> = { [K in keyof T]: [K, T[K]] }[keyof T];
209
474
  /**
210
- * A type-safe wrapper around `Object.entries()` that preserves the exact types of object keys
211
- * and values. Unlike the standard `Object.entries()` which returns `[string, any][]`, this
212
- * function returns an array of tuples where each tuple is precisely typed according to the
213
- * input object's structure.
475
+ * A type-safe wrapper around
476
+ * [`Object.entries()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries)
477
+ * that preserves the exact types of object keys and values. Unlike the standard
478
+ * `Object.entries()` which returns `[string, any][]`, this function returns an
479
+ * array of tuples where each tuple is precisely typed according to the input
480
+ * object's structure.
214
481
  *
215
- * This is particularly useful when working with objects that have known, fixed property types
216
- * and you want to maintain type safety when iterating over entries.
482
+ * This is particularly useful when working with objects that have known, fixed
483
+ * property types and you want to maintain type safety when iterating over
484
+ * entries.
217
485
  *
218
486
  * @example
219
487
  * ```typescript
@@ -243,15 +511,15 @@ type ObjectEntries<T extends Record<string, any>> = { [K in keyof T]: [K, T[K]]
243
511
  *
244
512
  * @public
245
513
  */
246
- declare const objectEntries: <T extends Record<string, any>>(obj: T) => ObjectEntries<T>[];
514
+ declare function objectEntries<T extends Record<string, any>>(obj: T): ObjectEntries<T>[];
247
515
  //#endregion
248
516
  //#region src/object-group-by.d.ts
249
517
  /**
250
- * A polyfill for the `Object.groupBy` static method.
518
+ * A polyfill for the [`Object.groupBy()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/groupBy) static method.
251
519
  *
252
520
  * @public
253
521
  */
254
- declare const objectGroupBy: <K$1 extends PropertyKey, T>(items: Iterable<T>, keySelector: (item: T, index: number) => K$1) => Partial<Record<K$1, T[]>>;
522
+ declare function objectGroupBy<K$1 extends PropertyKey, T>(items: Iterable<T>, keySelector: (item: T, index: number) => K$1): Partial<Record<K$1, T[]>>;
255
523
  //#endregion
256
524
  //#region src/once.d.ts
257
525
  /**
@@ -271,9 +539,16 @@ declare function once<T>(fn: () => T): () => T;
271
539
  //#endregion
272
540
  //#region src/sleep.d.ts
273
541
  /**
274
- * Sleep for a given number of milliseconds.
542
+ * Returns a Promise that resolves after a specified number of milliseconds.
543
+ *
544
+ * @param ms - The number of milliseconds to wait.
545
+ *
546
+ * @example
547
+ * ```js
548
+ * await sleep(1000) // Wait 1 second
549
+ * ```
275
550
  */
276
551
  declare function sleep(ms: number): Promise<void>;
277
552
  //#endregion
278
- export { Counter, DefaultMap, DefaultWeakMap, type ObjectEntries, WeakCounter, formatBytes, getDocument, getDocumentElement, getId, getWindow, isDeepEqual, isDocument, isDocumentFragment, isElement, isElementLike, isHTMLElement, isMap, isMathMLElement, isNodeLike, isObject, isSVGElement, isSet, isShadowRoot, isTextNode, isWindowLike, mapGroupBy, mapValues, objectEntries, objectGroupBy, once, sleep };
553
+ export { Counter, DefaultMap, DefaultWeakMap, type ObjectEntries, WeakCounter, formatBytes, getDocument, getDocumentElement, getId, getWindow, isDeepEqual, isDocument, isDocumentFragment, isElement, isElementLike, isHTMLElement, isMap, isMathMLElement, isNodeLike, isNotNullish, isObject, isSVGElement, isSet, isShadowRoot, isTextNode, isWindowLike, mapGroupBy, mapValues, objectEntries, objectGroupBy, once, sleep };
279
554
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/checker.ts","../src/default-map.ts","../src/dom.ts","../src/format-bytes.ts","../src/get-id.ts","../src/is-deep-equal.ts","../src/map-group-by.ts","../src/map-values.ts","../src/object-entries.ts","../src/object-group-by.ts","../src/once.ts","../src/sleep.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/checker.ts","../src/counter.ts","../src/default-map.ts","../src/dom.ts","../src/format-bytes.ts","../src/get-id.ts","../src/is-deep-equal.ts","../src/map-group-by.ts","../src/map-values.ts","../src/object-entries.ts","../src/object-group-by.ts","../src/once.ts","../src/sleep.ts"],"sourcesContent":[],"mappings":";;AAGA;AASA;AAOgB,iBAhBA,QAAA,CAgBmC,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,IAdvC,MAcuC,CAAA,MAAA,GAAA,MAAA,GAAA,MAAA,EAAA,OAAA,CAAA;AAOnD;;;AAAoD,iBAdpC,KAAA,CAcoC,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,IAdJ,GAcI,CAAA,OAAA,EAAA,OAAA,CAAA;;;;iBAPpC,KAAA,2BAAgC;ACkChD;;;AACyB,iBD5BT,YC4BS,CAAA,CAAA,CAAA,CAAA,KAAA,ED5Bc,CC4Bd,CAAA,EAAA,KAAA,ID5B2B,WC4B3B,CD5BuC,CC4BvC,CAAA;;;;ADnDzB;AASA;AAOA;AAOA;;;;;;;;AC2BA;;;;;;;;;AA0FA;;;;;;;;;;;;AC5EA;;;;;;;;;;;AA6GA;;;;;;;;;AAA0D,cD3H7C,OC2H6C,CAAA,GAAA,CAAA,SD3H1B,GC2H0B,CD3HtB,GC2HsB,EAAA,MAAA,CAAA,CAAA;EAAO,WAAA,CAAA,QAAA,CAAA,ED1HxC,QC0HwC,CAAA,SAAA,CD1HrB,GC0HqB,EAAA,MAAA,CAAA,CAAA;WDtH7C;;;AEpDpB;EAOgB,SAAA,CAAA,GAAU,EFoDT,GEpDS,EAAA,MAAsB,CAAf,EAAA,MAAe,CAAA,EAAI,IAAA;EAOpC;AAOhB;AAOA;EAUgB,SAAA,CAAA,GAAU,EF4BT,GE5BS,EAAA,MAAsB,CAAf,EAAA,MAAe,CAAA,EAAA,IAAQ;AAOxD;AAOA;AAOA;AAOA;AAWA;AAQA;;;;;;;AAqBA;;;;;;;AAkBA;;;;;;;;;;AC7HA;;;;ACWA;;;;ACXA;;;;ACsBA;;;;;;;;;;;;ACMA;;;;;;;;;;;ACnBA;;;AACmB,cRgIN,WQhIM,CAAA,YRgIgB,OQhIhB,CAAA,SRgIiC,OQhIjC,CRgIyC,GQhIzC,EAAA,MAAA,CAAA,CAAA;EAAG,WAAA,CAAA,OAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CRiIsB,GQjItB,EAAA,MAAA,CAAA,CAAA,EAAA,GAAA,IAAA;EAAE,GAAA,CAAA,GAAA,ERqIJ,GQrII,CAAA,EAAA,MAAA;EAChB;;AA0CR;EAAwC,SAAA,CAAA,GAAA,ERiGvB,GQjGuB,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EACjC;;;EACS,SAAA,CAAA,GAAA,ERsGC,GQtGD,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;;;;;ATzDhB;AASA;AAOA;AAOA;;;;;;;;AC2BA;;;;;;;;;AA0FA;;;;;;;;;;;;AC5EA;;;;;;;;;;;AA6GA;;;;;;;;;;;;;;AC1KA;AAOA;AAOA;AAOA;AAOA;AAUA;AAOA;AAOA;AAOA;AAOgB,cDLH,UCKgB,CAA2B,GAAA,EAAA,CAAA,CAAA,SDLlB,GCKyB,CDLrB,GCKqB,EDLlB,CCKkB,CAAA,CAAA;EAW/C,iBAAY,cAA2B;EAQvC,WAAA,CAAS,cAAA,EAAA,GAAA,GDrBW,CCqBX,EAAA,QAAA,CAAA,EDrByB,QCqBzB,CAAA,SAAA,CDrB4C,GCqB5C,EDrB+C,CCqB/C,CAAA,CAAA;EACd,GAAA,CAAA,GAAA,EDjBS,GCiBT,CAAA,EDjBa,CCiBb;;;;;;AAoBX;;;;;;;AAkBA;;;;;;;;;;AC7HA;;;;ACWA;;;;ACXA;;;;ACsBA;;;;;;;;;;;;ACMA;;;;;;;;;;;ACnBA;;;;;;;;AA4CA;;;;;;;;;AC/BA;;;;;;;;;;;;;;ACdA;;;;ACHgB,cVsKH,cUtK6B,CAAA,YVsKJ,OUtKI,EAAA,CAAA,CAAA,SVsKgB,OUtKhB,CVsKwB,GUtKxB,EVsK2B,CUtK3B,CAAA,CAAA;;oCV0KhB,iCACQ,KAAG;WAMjB,MAAI;;;;;AFxLxB;AASA;AAOgB,iBGbA,SAAA,CHamC,IAAA,EGbnB,IHamB,CAAA,EAAA,IAAA,IGbJ,OHaI;AAOnD;;;AAAoD,iBGbpC,UAAA,CHaoC,IAAA,EGbnB,IHamB,CAAA,EAAA,IAAA,IGbJ,IHaI;;;;iBGNpC,aAAA,OAAoB,eAAe;AFiCnD;;;AACyB,iBE3BT,YAAA,CF2BS,IAAA,EE3BU,IF2BV,CAAA,EAAA,IAAA,IE3ByB,UF2BzB;;;;AADO,iBEnBhB,eAAA,CFmBgB,IAAA,EEnBM,IFmBN,CAAA,EAAA,IAAA,IEnBqB,aFmBrB;;AA0FhC;;AAA4D,iBEnG5C,UAAA,CFmG4C,IAAA,EEnG3B,IFmG2B,CAAA,EAAA,IAAA,IEnGZ,QFmGY;;;;AAmB3C,iBE/GD,kBAAA,CF+GC,IAAA,EE/GwB,IF+GxB,CAAA,EAAA,IAAA,IE/GuC,gBF+GvC;;;;iBExGD,YAAA,OAAmB,eAAe;;ADSlD;;AAA6C,iBCF7B,UAAA,CDE6B,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,ICFQ,IDER;;;;AAGK,iBCElC,aAAA,CDFkC,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,ICEM,ODFN;;;;AAHT,iBCgBzB,YAAA,CDhByB,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,ICgBc,MDhBd;AA6GzC;;;;AAI0B,iBCzFV,SAAA,CDyFU,MAAA,CAAA,ECxFf,IDwFe,GCxFR,UDwFQ,GCxFK,QDwFL,GAAA,IAAA,CAAA,ECvFvB,MDuFuB,GAAA,OCvFP,UDuFO;;;;;AAJgC,iBChE1C,WAAA,CDgE0C,MAAA,CAAA,EC/D/C,OD+D+C,GC/DrC,MD+DqC,GC/D5B,ID+D4B,GC/DrB,QD+DqB,GAAA,IAAA,CAAA,EC9DvD,QD8DuD;;;;iBC9C1C,kBAAA,UACL,UAAU,OAAO,SAAS,kBAClC;;;;AHjIH;AASA;AAOA;AAOA;AAAuC,iBIrBvB,WAAA,CJqBuB,KAAA,EAAA,MAAA,CAAA,EAAA,MAAA;;;;;;iBKVvB,KAAA,CAAA;;;;ALbhB;AASA;AAOgB,iBMdA,WAAA,CNcmC,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,OAAA,CAAA,EAAA,OAAA;;;AAOnD;;;;;iBOCgB,0BACP,SAAS,wBACI,qBAAqB,MACxC,IAAI,KAAG;;;;AP3BV;AASA;AAOA;AAOA;;;;;;;;AC2BA;;;;;;;;;AA0FA;;;;;;;;;;;;AC5Ea,iBMlCG,SNkCO,CAAA,OAAA,EAAA,QAAA,CAAA,CAAA,MAAA,EMjCb,MNiCa,CAAA,MAAA,EMjCE,ONiCF,CAAA,EAAA,QAAA,EAAA,CAAA,KAAA,EMhCH,ONgCG,EAAA,GAAA,EAAA,MAAA,EAAA,GMhCsB,QNgCtB,CAAA,EM/BpB,MN+BoB,CAAA,MAAA,EM/BL,QN+BK,CAAA;;;;AFhEvB;AASA;AAOA;AAOA;;;;;;;;AC2BA;;AAC4C,KQxChC,aRwCgC,CAAA,UQxCR,MRwCQ,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,GAAA,QAAnB,MQvCX,CRuCW,GAAA,CQvCN,CRuCM,EQvCH,CRuCG,CQvCD,CRuCC,CAAA,CAAA,EAIL,CAAA,MQ1CZ,CR0CY,CAAA;;;;;AAqFpB;;;;;;;;;;;;AC5EA;;;;;;;;;;;AA6GA;;;;;;;;;;;;;iBOtHgB,wBAAwB,0BACjC,IACJ,cAAc;;;ATlCjB;;;;;iBUCgB,0BAAwB,uBAC/B,SAAS,wBACI,qBAAqB,MACxC,QAAQ,OAAO,KAAG;;;;AV3BrB;AASA;AAOA;AAOA;;;;;;;;AC2BA;AAAoC,iBUxCpB,IVwCoB,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,GAAA,GUxCF,CVwCE,CAAA,EAAA,GAAA,GUxCQ,CVwCR;;;;ADlDpC;AASA;AAOA;AAOA;;;;;;iBYhBgB,KAAA,cAAmB"}
package/dist/index.js CHANGED
@@ -7,27 +7,15 @@ function isMap(value) {
7
7
  function isSet(value) {
8
8
  return value instanceof Set;
9
9
  }
10
- var DefaultMap = class extends Map {
11
- constructor(defaultFactory, iterable) {
12
- super(iterable), this.defaultFactory = defaultFactory;
13
- }
14
- get(key) {
15
- if (this.has(key)) return super.get(key);
16
- let value = this.defaultFactory();
17
- return this.set(key, value), value;
18
- }
19
- }, DefaultWeakMap = class extends WeakMap {
20
- constructor(defaultFactory, entries) {
21
- super(entries), this.defaultFactory = defaultFactory;
10
+ function isNotNullish(value) {
11
+ return value != null;
12
+ }
13
+ var Counter = class extends Map {
14
+ constructor(iterable) {
15
+ super(iterable);
22
16
  }
23
17
  get(key) {
24
- if (this.has(key)) return super.get(key);
25
- let value = this.defaultFactory();
26
- return this.set(key, value), value;
27
- }
28
- }, Counter = class extends DefaultMap {
29
- constructor(iterable) {
30
- super(() => 0, iterable);
18
+ return super.get(key) ?? 0;
31
19
  }
32
20
  increment(key, amount = 1) {
33
21
  this.set(key, this.get(key) + amount);
@@ -35,9 +23,12 @@ var DefaultMap = class extends Map {
35
23
  decrement(key, amount = 1) {
36
24
  this.set(key, this.get(key) - amount);
37
25
  }
38
- }, WeakCounter = class extends DefaultWeakMap {
26
+ }, WeakCounter = class extends WeakMap {
39
27
  constructor(entries) {
40
- super(() => 0, entries);
28
+ super(entries);
29
+ }
30
+ get(key) {
31
+ return super.get(key) ?? 0;
41
32
  }
42
33
  increment(key, amount = 1) {
43
34
  this.set(key, this.get(key) + amount);
@@ -45,6 +36,24 @@ var DefaultMap = class extends Map {
45
36
  decrement(key, amount = 1) {
46
37
  this.set(key, this.get(key) - amount);
47
38
  }
39
+ }, DefaultMap = class extends Map {
40
+ constructor(defaultFactory, iterable) {
41
+ super(iterable), this.defaultFactory = defaultFactory;
42
+ }
43
+ get(key) {
44
+ if (this.has(key)) return super.get(key);
45
+ let value = this.defaultFactory();
46
+ return this.set(key, value), value;
47
+ }
48
+ }, DefaultWeakMap = class extends WeakMap {
49
+ constructor(defaultFactory, entries) {
50
+ super(entries), this.defaultFactory = defaultFactory;
51
+ }
52
+ get(key) {
53
+ if (this.has(key)) return super.get(key);
54
+ let value = this.defaultFactory();
55
+ return this.set(key, value), value;
56
+ }
48
57
  };
49
58
  function isElement(node) {
50
59
  return node.nodeType === 1;
@@ -146,16 +155,17 @@ function mapGroupByPolyfill(items, keySelector) {
146
155
  }
147
156
  return map;
148
157
  }
149
- function mapGroupByNative(items, keySelector) {
150
- return Map.groupBy(items, keySelector);
158
+ function mapGroupBy(items, keySelector) {
159
+ return Map.groupBy ? Map.groupBy(items, keySelector) : mapGroupByPolyfill(items, keySelector);
151
160
  }
152
- const mapGroupBy = /* @__PURE__ */ (() => !!Map.groupBy)() ? mapGroupByNative : mapGroupByPolyfill;
153
161
  function mapValues(object, callback) {
154
162
  let result = {};
155
163
  for (let [key, value] of Object.entries(object)) result[key] = callback(value, key);
156
164
  return result;
157
165
  }
158
- const objectEntries = Object.entries;
166
+ function objectEntries(obj) {
167
+ return Object.entries(obj);
168
+ }
159
169
  function objectGroupByPolyfill(items, keySelector) {
160
170
  let result = {}, index = 0;
161
171
  for (let item of items) {
@@ -164,10 +174,9 @@ function objectGroupByPolyfill(items, keySelector) {
164
174
  }
165
175
  return result;
166
176
  }
167
- function objectGroupByNative(items, keySelector) {
168
- return Object.groupBy(items, keySelector);
177
+ function objectGroupBy(items, keySelector) {
178
+ return Object.groupBy ? Object.groupBy(items, keySelector) : objectGroupByPolyfill(items, keySelector);
169
179
  }
170
- const objectGroupBy = /* @__PURE__ */ (() => !!Object.groupBy)() ? objectGroupByNative : objectGroupByPolyfill;
171
180
  function once(fn) {
172
181
  let called = !1, result;
173
182
  return () => (called || (result = fn(), called = !0, fn = void 0), result);
@@ -175,6 +184,6 @@ function once(fn) {
175
184
  function sleep(ms) {
176
185
  return new Promise((resolve) => setTimeout(resolve, ms));
177
186
  }
178
- export { Counter, DefaultMap, DefaultWeakMap, WeakCounter, formatBytes, getDocument, getDocumentElement, getId, getWindow, isDeepEqual, isDocument, isDocumentFragment, isElement, isElementLike, isHTMLElement, isMap, isMathMLElement, isNodeLike, isObject, isSVGElement, isSet, isShadowRoot, isTextNode, isWindowLike, mapGroupBy, mapValues, objectEntries, objectGroupBy, once, sleep };
187
+ export { Counter, DefaultMap, DefaultWeakMap, WeakCounter, formatBytes, getDocument, getDocumentElement, getId, getWindow, isDeepEqual, isDocument, isDocumentFragment, isElement, isElementLike, isHTMLElement, isMap, isMathMLElement, isNodeLike, isNotNullish, isObject, isSVGElement, isSet, isShadowRoot, isTextNode, isWindowLike, mapGroupBy, mapValues, objectEntries, objectGroupBy, once, sleep };
179
188
 
180
189
  //# sourceMappingURL=index.js.map