@ocavue/utils 1.3.0 → 1.3.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.
- package/dist/index.d.ts +307 -36
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -28
- package/dist/index.js.map +1 -1
- package/package.json +12 -8
- package/src/__snapshots__/e2e.test.ts.snap +2 -2
- package/src/counter.test.ts +197 -0
- package/src/counter.ts +166 -0
- package/src/default-map.test.ts +1 -193
- package/src/default-map.ts +149 -51
- package/src/index.ts +2 -1
- package/src/map-group-by.test.ts +23 -10
- package/src/map-group-by.ts +7 -15
- package/src/object-entries.ts +13 -8
- package/src/object-group-by.test.ts +25 -10
- package/src/object-group-by.ts +7 -17
- package/src/once.test.ts +1 -30
- package/src/sleep.ts +8 -1
- package/src/once-stub-1.ts +0 -13
- package/src/once-stub-2.ts +0 -3
package/dist/index.d.ts
CHANGED
|
@@ -12,34 +12,63 @@ declare function isMap(value: unknown): value is Map<unknown, unknown>;
|
|
|
12
12
|
*/
|
|
13
13
|
declare function isSet(value: unknown): value is Set<unknown>;
|
|
14
14
|
//#endregion
|
|
15
|
-
//#region src/
|
|
15
|
+
//#region src/counter.d.ts
|
|
16
16
|
/**
|
|
17
|
-
* A map that
|
|
17
|
+
* A map that counts occurrences of keys.
|
|
18
18
|
*
|
|
19
|
-
*
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
get(key: K$1): V;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* A weak map that automatically creates values for missing keys using a factory function.
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // Count word occurrences
|
|
22
|
+
* const wordCounter = new Counter<string>()
|
|
23
|
+
* const words = ['apple', 'banana', 'apple', 'cherry', 'banana', 'apple']
|
|
28
24
|
*
|
|
29
|
-
*
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
*
|
|
25
|
+
* for (const word of words) {
|
|
26
|
+
* wordCounter.increment(word)
|
|
27
|
+
* }
|
|
28
|
+
*
|
|
29
|
+
* console.log(wordCounter.get('apple')) // 3
|
|
30
|
+
* console.log(wordCounter.get('banana')) // 2
|
|
31
|
+
* console.log(wordCounter.get('cherry')) // 1
|
|
32
|
+
* console.log(wordCounter.get('orange')) // 0 (defaults to 0)
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* // Initialize with existing counts
|
|
38
|
+
* const counter = new Counter<string>([
|
|
39
|
+
* ['red', 5],
|
|
40
|
+
* ['blue', 3],
|
|
41
|
+
* ['green', 7]
|
|
42
|
+
* ])
|
|
43
|
+
*
|
|
44
|
+
* counter.increment('red', 2) // red: 5 -> 7
|
|
45
|
+
* counter.decrement('blue') // blue: 3 -> 2
|
|
46
|
+
* counter.increment('yellow') // yellow: 0 -> 1
|
|
47
|
+
*
|
|
48
|
+
* console.log(counter.get('red')) // 7
|
|
49
|
+
* console.log(counter.get('blue')) // 2
|
|
50
|
+
* console.log(counter.get('yellow')) // 1
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* // Track event frequencies
|
|
56
|
+
* const eventCounter = new Counter<string>()
|
|
57
|
+
*
|
|
58
|
+
* eventCounter.increment('click', 5)
|
|
59
|
+
* eventCounter.increment('hover', 3)
|
|
60
|
+
* eventCounter.increment('click', 2)
|
|
38
61
|
*
|
|
39
|
-
*
|
|
62
|
+
* // Get most common events
|
|
63
|
+
* const events = [...eventCounter.entries()]
|
|
64
|
+
* .sort((a, b) => b[1] - a[1])
|
|
65
|
+
*
|
|
66
|
+
* console.log(events) // [['click', 7], ['hover', 3]]
|
|
67
|
+
* ```
|
|
40
68
|
*/
|
|
41
|
-
declare class Counter<K$1> extends
|
|
69
|
+
declare class Counter<K$1> extends Map<K$1, number> {
|
|
42
70
|
constructor(iterable?: Iterable<readonly [K$1, number]>);
|
|
71
|
+
get(key: K$1): number;
|
|
43
72
|
/**
|
|
44
73
|
* Increments the count for a key by a given amount (default 1).
|
|
45
74
|
*/
|
|
@@ -52,10 +81,72 @@ declare class Counter<K$1> extends DefaultMap<K$1, number> {
|
|
|
52
81
|
/**
|
|
53
82
|
* A weak map that counts occurrences of object keys.
|
|
54
83
|
*
|
|
55
|
-
* Similar to Counter but uses WeakMap as the base, allowing garbage collection of keys.
|
|
84
|
+
* Similar to {@link Counter} but uses WeakMap as the base, allowing garbage collection of keys.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* // Track reference counts for DOM elements
|
|
89
|
+
* const elementRefs = new WeakCounter<HTMLElement>()
|
|
90
|
+
*
|
|
91
|
+
* function addReference(element: HTMLElement) {
|
|
92
|
+
* elementRefs.increment(element)
|
|
93
|
+
* console.log(`References: ${elementRefs.get(element)}`)
|
|
94
|
+
* }
|
|
95
|
+
*
|
|
96
|
+
* function removeReference(element: HTMLElement) {
|
|
97
|
+
* elementRefs.decrement(element)
|
|
98
|
+
* console.log(`References: ${elementRefs.get(element)}`)
|
|
99
|
+
* }
|
|
100
|
+
*
|
|
101
|
+
* const div = document.createElement('div')
|
|
102
|
+
* addReference(div) // References: 1
|
|
103
|
+
* addReference(div) // References: 2
|
|
104
|
+
* removeReference(div) // References: 1
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```typescript
|
|
109
|
+
* // Count object interactions without preventing garbage collection
|
|
110
|
+
* const objectInteractions = new WeakCounter<object>()
|
|
111
|
+
*
|
|
112
|
+
* function handleInteraction(obj: object, count = 1) {
|
|
113
|
+
* objectInteractions.increment(obj, count)
|
|
114
|
+
* }
|
|
115
|
+
*
|
|
116
|
+
* const user = { id: 1, name: 'Alice' }
|
|
117
|
+
* const session = { sessionId: 'abc123' }
|
|
118
|
+
*
|
|
119
|
+
* handleInteraction(user, 3)
|
|
120
|
+
* handleInteraction(session, 1)
|
|
121
|
+
* handleInteraction(user, 2)
|
|
122
|
+
*
|
|
123
|
+
* console.log(objectInteractions.get(user)) // 5
|
|
124
|
+
* console.log(objectInteractions.get(session)) // 1
|
|
125
|
+
* // When user and session are no longer referenced elsewhere,
|
|
126
|
+
* // they can be garbage collected along with their counts
|
|
127
|
+
* ```
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* // Initialize with existing counts
|
|
132
|
+
* const cache1 = {}
|
|
133
|
+
* const cache2 = {}
|
|
134
|
+
* const cache3 = {}
|
|
135
|
+
*
|
|
136
|
+
* const hitCounter = new WeakCounter<object>([
|
|
137
|
+
* [cache1, 10],
|
|
138
|
+
* [cache2, 5],
|
|
139
|
+
* [cache3, 15]
|
|
140
|
+
* ])
|
|
141
|
+
*
|
|
142
|
+
* hitCounter.increment(cache1, 3) // 10 -> 13
|
|
143
|
+
* console.log(hitCounter.get(cache1)) // 13
|
|
144
|
+
* console.log(hitCounter.get(cache2)) // 5
|
|
145
|
+
* ```
|
|
56
146
|
*/
|
|
57
|
-
declare class WeakCounter<K$1 extends WeakKey> extends
|
|
147
|
+
declare class WeakCounter<K$1 extends WeakKey> extends WeakMap<K$1, number> {
|
|
58
148
|
constructor(entries?: readonly (readonly [K$1, number])[] | null);
|
|
149
|
+
get(key: K$1): number;
|
|
59
150
|
/**
|
|
60
151
|
* Increments the count for a key by a given amount (default 1).
|
|
61
152
|
*/
|
|
@@ -66,6 +157,176 @@ declare class WeakCounter<K$1 extends WeakKey> extends DefaultWeakMap<K$1, numbe
|
|
|
66
157
|
decrement(key: K$1, amount?: number): void;
|
|
67
158
|
}
|
|
68
159
|
//#endregion
|
|
160
|
+
//#region src/default-map.d.ts
|
|
161
|
+
/**
|
|
162
|
+
* A map that automatically creates values for missing keys using a factory function.
|
|
163
|
+
*
|
|
164
|
+
* Similar to Python's [defaultdict](https://docs.python.org/3.13/library/collections.html#collections.defaultdict).
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```typescript
|
|
168
|
+
* // Group items by category using arrays
|
|
169
|
+
* const groupByCategory = new DefaultMap<string, string[]>(() => [])
|
|
170
|
+
*
|
|
171
|
+
* groupByCategory.get('fruits').push('apple', 'banana')
|
|
172
|
+
* groupByCategory.get('vegetables').push('carrot')
|
|
173
|
+
* groupByCategory.get('fruits').push('orange')
|
|
174
|
+
*
|
|
175
|
+
* console.log(groupByCategory.get('fruits')) // ['apple', 'banana', 'orange']
|
|
176
|
+
* console.log(groupByCategory.get('vegetables')) // ['carrot']
|
|
177
|
+
* console.log(groupByCategory.get('dairy')) // [] (auto-created)
|
|
178
|
+
* ```
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* // Build a graph with adjacency lists
|
|
183
|
+
* const graph = new DefaultMap<string, Set<string>>(() => new Set())
|
|
184
|
+
*
|
|
185
|
+
* graph.get('A').add('B').add('C')
|
|
186
|
+
* graph.get('B').add('C').add('D')
|
|
187
|
+
* graph.get('C').add('D')
|
|
188
|
+
*
|
|
189
|
+
* console.log([...graph.get('A')]) // ['B', 'C']
|
|
190
|
+
* console.log([...graph.get('B')]) // ['C', 'D']
|
|
191
|
+
* console.log([...graph.get('E')]) // [] (auto-created empty set)
|
|
192
|
+
* ```
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```typescript
|
|
196
|
+
* // Initialize with existing entries
|
|
197
|
+
* const scores = new DefaultMap<string, number>(
|
|
198
|
+
* () => 0,
|
|
199
|
+
* [
|
|
200
|
+
* ['Alice', 100],
|
|
201
|
+
* ['Bob', 85]
|
|
202
|
+
* ]
|
|
203
|
+
* )
|
|
204
|
+
*
|
|
205
|
+
* scores.set('Alice', scores.get('Alice') + 10) // 100 -> 110
|
|
206
|
+
* console.log(scores.get('Alice')) // 110
|
|
207
|
+
* console.log(scores.get('Bob')) // 85
|
|
208
|
+
* console.log(scores.get('Charlie')) // 0 (auto-created)
|
|
209
|
+
* ```
|
|
210
|
+
*
|
|
211
|
+
* @example
|
|
212
|
+
* ```typescript
|
|
213
|
+
* // Nested DefaultMaps for 2D data structures
|
|
214
|
+
* const matrix = new DefaultMap<number, DefaultMap<number, number>>(
|
|
215
|
+
* () => new DefaultMap<number, number>(() => 0)
|
|
216
|
+
* )
|
|
217
|
+
*
|
|
218
|
+
* matrix.get(0).set(0, 1)
|
|
219
|
+
* matrix.get(0).set(1, 2)
|
|
220
|
+
* matrix.get(1).set(1, 3)
|
|
221
|
+
*
|
|
222
|
+
* console.log(matrix.get(0).get(0)) // 1
|
|
223
|
+
* console.log(matrix.get(0).get(1)) // 2
|
|
224
|
+
* console.log(matrix.get(1).get(0)) // 0 (auto-created)
|
|
225
|
+
* console.log(matrix.get(2).get(3)) // 0 (both auto-created)
|
|
226
|
+
* ```
|
|
227
|
+
*/
|
|
228
|
+
declare class DefaultMap<K$1, V> extends Map<K$1, V> {
|
|
229
|
+
private readonly defaultFactory;
|
|
230
|
+
constructor(defaultFactory: () => V, iterable?: Iterable<readonly [K$1, V]>);
|
|
231
|
+
get(key: K$1): V;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* A weak map that automatically creates values for missing keys using a factory function.
|
|
235
|
+
*
|
|
236
|
+
* Similar to {@link DefaultMap} but uses WeakMap as the base, allowing garbage collection of keys.
|
|
237
|
+
*
|
|
238
|
+
* @example
|
|
239
|
+
* ```typescript
|
|
240
|
+
* // Store metadata for DOM elements without preventing garbage collection
|
|
241
|
+
* const elementMetadata = new DefaultWeakMap<HTMLElement, { clicks: number; hovers: number }>(
|
|
242
|
+
* () => ({ clicks: 0, hovers: 0 })
|
|
243
|
+
* )
|
|
244
|
+
*
|
|
245
|
+
* const button = document.querySelector('button')!
|
|
246
|
+
* const div = document.querySelector('div')!
|
|
247
|
+
*
|
|
248
|
+
* elementMetadata.get(button).clicks++
|
|
249
|
+
* elementMetadata.get(button).clicks++
|
|
250
|
+
* elementMetadata.get(div).hovers++
|
|
251
|
+
*
|
|
252
|
+
* console.log(elementMetadata.get(button)) // { clicks: 2, hovers: 0 }
|
|
253
|
+
* console.log(elementMetadata.get(div)) // { clicks: 0, hovers: 1 }
|
|
254
|
+
* // When elements are removed from DOM and not referenced,
|
|
255
|
+
* // their metadata can be garbage collected
|
|
256
|
+
* ```
|
|
257
|
+
*
|
|
258
|
+
* @example
|
|
259
|
+
* ```typescript
|
|
260
|
+
* // Cache computed properties for objects
|
|
261
|
+
* const computedCache = new DefaultWeakMap<object, Map<string, any>>(
|
|
262
|
+
* () => new Map()
|
|
263
|
+
* )
|
|
264
|
+
*
|
|
265
|
+
* function getOrCompute(obj: object, key: string, compute: () => any) {
|
|
266
|
+
* const cache = computedCache.get(obj)
|
|
267
|
+
* if (!cache.has(key)) {
|
|
268
|
+
* cache.set(key, compute())
|
|
269
|
+
* }
|
|
270
|
+
* return cache.get(key)
|
|
271
|
+
* }
|
|
272
|
+
*
|
|
273
|
+
* const user = { name: 'Alice', age: 30 }
|
|
274
|
+
* const displayName = getOrCompute(user, 'displayName', () => user.name.toUpperCase())
|
|
275
|
+
* const birthYear = getOrCompute(user, 'birthYear', () => new Date().getFullYear() - user.age)
|
|
276
|
+
*
|
|
277
|
+
* console.log(displayName) // 'ALICE'
|
|
278
|
+
* console.log(birthYear) // 1994 (or current year - 30)
|
|
279
|
+
* ```
|
|
280
|
+
*
|
|
281
|
+
* @example
|
|
282
|
+
* ```typescript
|
|
283
|
+
* // Initialize with existing entries
|
|
284
|
+
* const obj1 = {}
|
|
285
|
+
* const obj2 = {}
|
|
286
|
+
*
|
|
287
|
+
* const objectData = new DefaultWeakMap<object, string[]>(
|
|
288
|
+
* () => [],
|
|
289
|
+
* [
|
|
290
|
+
* [obj1, ['tag1', 'tag2']],
|
|
291
|
+
* [obj2, ['tag3']]
|
|
292
|
+
* ]
|
|
293
|
+
* )
|
|
294
|
+
*
|
|
295
|
+
* objectData.get(obj1).push('tag4')
|
|
296
|
+
* console.log(objectData.get(obj1)) // ['tag1', 'tag2', 'tag4']
|
|
297
|
+
* console.log(objectData.get(obj2)) // ['tag3']
|
|
298
|
+
*
|
|
299
|
+
* const obj3 = {}
|
|
300
|
+
* console.log(objectData.get(obj3)) // [] (auto-created)
|
|
301
|
+
* ```
|
|
302
|
+
*
|
|
303
|
+
* @example
|
|
304
|
+
* ```typescript
|
|
305
|
+
* // Track event listeners per element using both DefaultWeakMap and DefaultMap
|
|
306
|
+
* const eventListeners = new DefaultWeakMap<EventTarget, DefaultMap<string, Function[]>>(
|
|
307
|
+
* () => new DefaultMap<string, Function[]>(() => [])
|
|
308
|
+
* )
|
|
309
|
+
*
|
|
310
|
+
* function addListener(target: EventTarget, event: string, handler: Function) {
|
|
311
|
+
* eventListeners.get(target).get(event).push(handler)
|
|
312
|
+
* }
|
|
313
|
+
*
|
|
314
|
+
* const element = document.createElement('button')
|
|
315
|
+
* addListener(element, 'click', () => console.log('clicked'))
|
|
316
|
+
* addListener(element, 'click', () => console.log('also clicked'))
|
|
317
|
+
* addListener(element, 'hover', () => console.log('hovered'))
|
|
318
|
+
*
|
|
319
|
+
* console.log(eventListeners.get(element).get('click').length) // 2
|
|
320
|
+
* console.log(eventListeners.get(element).get('hover').length) // 1
|
|
321
|
+
* // No need for has() checks or null assertions - everything auto-initializes!
|
|
322
|
+
* ```
|
|
323
|
+
*/
|
|
324
|
+
declare class DefaultWeakMap<K$1 extends WeakKey, V> extends WeakMap<K$1, V> {
|
|
325
|
+
private readonly defaultFactory;
|
|
326
|
+
constructor(defaultFactory: () => V, entries?: readonly (readonly [K$1, V])[] | null);
|
|
327
|
+
get(key: K$1): V;
|
|
328
|
+
}
|
|
329
|
+
//#endregion
|
|
69
330
|
//#region src/dom.d.ts
|
|
70
331
|
/**
|
|
71
332
|
* Checks if the given DOM node is an Element.
|
|
@@ -148,11 +409,11 @@ declare function isDeepEqual(a: unknown, b: unknown): boolean;
|
|
|
148
409
|
//#endregion
|
|
149
410
|
//#region src/map-group-by.d.ts
|
|
150
411
|
/**
|
|
151
|
-
* A polyfill for the `Map.groupBy` static method.
|
|
412
|
+
* A polyfill for the [`Map.groupBy()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/groupBy) static method.
|
|
152
413
|
*
|
|
153
414
|
* @public
|
|
154
415
|
*/
|
|
155
|
-
declare
|
|
416
|
+
declare function mapGroupBy<K$1, T>(items: Iterable<T>, keySelector: (item: T, index: number) => K$1): Map<K$1, T[]>;
|
|
156
417
|
//#endregion
|
|
157
418
|
//#region src/map-values.d.ts
|
|
158
419
|
/**
|
|
@@ -207,13 +468,16 @@ declare function mapValues<ValueIn, ValueOut>(object: Record<string, ValueIn>, c
|
|
|
207
468
|
*/
|
|
208
469
|
type ObjectEntries<T extends Record<string, any>> = { [K in keyof T]: [K, T[K]] }[keyof T];
|
|
209
470
|
/**
|
|
210
|
-
* A type-safe wrapper around
|
|
211
|
-
*
|
|
212
|
-
*
|
|
213
|
-
*
|
|
471
|
+
* A type-safe wrapper around
|
|
472
|
+
* [`Object.entries()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries)
|
|
473
|
+
* that preserves the exact types of object keys and values. Unlike the standard
|
|
474
|
+
* `Object.entries()` which returns `[string, any][]`, this function returns an
|
|
475
|
+
* array of tuples where each tuple is precisely typed according to the input
|
|
476
|
+
* object's structure.
|
|
214
477
|
*
|
|
215
|
-
* This is particularly useful when working with objects that have known, fixed
|
|
216
|
-
* and you want to maintain type safety when iterating over
|
|
478
|
+
* This is particularly useful when working with objects that have known, fixed
|
|
479
|
+
* property types and you want to maintain type safety when iterating over
|
|
480
|
+
* entries.
|
|
217
481
|
*
|
|
218
482
|
* @example
|
|
219
483
|
* ```typescript
|
|
@@ -243,15 +507,15 @@ type ObjectEntries<T extends Record<string, any>> = { [K in keyof T]: [K, T[K]]
|
|
|
243
507
|
*
|
|
244
508
|
* @public
|
|
245
509
|
*/
|
|
246
|
-
declare
|
|
510
|
+
declare function objectEntries<T extends Record<string, any>>(obj: T): ObjectEntries<T>[];
|
|
247
511
|
//#endregion
|
|
248
512
|
//#region src/object-group-by.d.ts
|
|
249
513
|
/**
|
|
250
|
-
* A polyfill for the `Object.groupBy` static method.
|
|
514
|
+
* A polyfill for the [`Object.groupBy()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/groupBy) static method.
|
|
251
515
|
*
|
|
252
516
|
* @public
|
|
253
517
|
*/
|
|
254
|
-
declare
|
|
518
|
+
declare function objectGroupBy<K$1 extends PropertyKey, T>(items: Iterable<T>, keySelector: (item: T, index: number) => K$1): Partial<Record<K$1, T[]>>;
|
|
255
519
|
//#endregion
|
|
256
520
|
//#region src/once.d.ts
|
|
257
521
|
/**
|
|
@@ -271,7 +535,14 @@ declare function once<T>(fn: () => T): () => T;
|
|
|
271
535
|
//#endregion
|
|
272
536
|
//#region src/sleep.d.ts
|
|
273
537
|
/**
|
|
274
|
-
*
|
|
538
|
+
* Returns a Promise that resolves after a specified number of milliseconds.
|
|
539
|
+
*
|
|
540
|
+
* @param ms - The number of milliseconds to wait.
|
|
541
|
+
*
|
|
542
|
+
* @example
|
|
543
|
+
* ```js
|
|
544
|
+
* await sleep(1000) // Wait 1 second
|
|
545
|
+
* ```
|
|
275
546
|
*/
|
|
276
547
|
declare function sleep(ms: number): Promise<void>;
|
|
277
548
|
//#endregion
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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":";;AAGA;AASA;AAOgB,iBAhBA,QAAA,CAgBmC,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,IAdvC,MAcuC,CAAA,MAAA,GAAA,MAAA,GAAA,MAAA,EAAA,OAAA,CAAA;;;;
|
|
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":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,27 +7,12 @@ function isMap(value) {
|
|
|
7
7
|
function isSet(value) {
|
|
8
8
|
return value instanceof Set;
|
|
9
9
|
}
|
|
10
|
-
var
|
|
11
|
-
constructor(
|
|
12
|
-
super(iterable)
|
|
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
|
+
var Counter = class extends Map {
|
|
11
|
+
constructor(iterable) {
|
|
12
|
+
super(iterable);
|
|
22
13
|
}
|
|
23
14
|
get(key) {
|
|
24
|
-
|
|
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);
|
|
15
|
+
return super.get(key) ?? 0;
|
|
31
16
|
}
|
|
32
17
|
increment(key, amount = 1) {
|
|
33
18
|
this.set(key, this.get(key) + amount);
|
|
@@ -35,9 +20,12 @@ var DefaultMap = class extends Map {
|
|
|
35
20
|
decrement(key, amount = 1) {
|
|
36
21
|
this.set(key, this.get(key) - amount);
|
|
37
22
|
}
|
|
38
|
-
}, WeakCounter = class extends
|
|
23
|
+
}, WeakCounter = class extends WeakMap {
|
|
39
24
|
constructor(entries) {
|
|
40
|
-
super(
|
|
25
|
+
super(entries);
|
|
26
|
+
}
|
|
27
|
+
get(key) {
|
|
28
|
+
return super.get(key) ?? 0;
|
|
41
29
|
}
|
|
42
30
|
increment(key, amount = 1) {
|
|
43
31
|
this.set(key, this.get(key) + amount);
|
|
@@ -45,6 +33,24 @@ var DefaultMap = class extends Map {
|
|
|
45
33
|
decrement(key, amount = 1) {
|
|
46
34
|
this.set(key, this.get(key) - amount);
|
|
47
35
|
}
|
|
36
|
+
}, DefaultMap = class extends Map {
|
|
37
|
+
constructor(defaultFactory, iterable) {
|
|
38
|
+
super(iterable), this.defaultFactory = defaultFactory;
|
|
39
|
+
}
|
|
40
|
+
get(key) {
|
|
41
|
+
if (this.has(key)) return super.get(key);
|
|
42
|
+
let value = this.defaultFactory();
|
|
43
|
+
return this.set(key, value), value;
|
|
44
|
+
}
|
|
45
|
+
}, DefaultWeakMap = class extends WeakMap {
|
|
46
|
+
constructor(defaultFactory, entries) {
|
|
47
|
+
super(entries), this.defaultFactory = defaultFactory;
|
|
48
|
+
}
|
|
49
|
+
get(key) {
|
|
50
|
+
if (this.has(key)) return super.get(key);
|
|
51
|
+
let value = this.defaultFactory();
|
|
52
|
+
return this.set(key, value), value;
|
|
53
|
+
}
|
|
48
54
|
};
|
|
49
55
|
function isElement(node) {
|
|
50
56
|
return node.nodeType === 1;
|
|
@@ -146,16 +152,17 @@ function mapGroupByPolyfill(items, keySelector) {
|
|
|
146
152
|
}
|
|
147
153
|
return map;
|
|
148
154
|
}
|
|
149
|
-
function
|
|
150
|
-
return Map.groupBy(items, keySelector);
|
|
155
|
+
function mapGroupBy(items, keySelector) {
|
|
156
|
+
return Map.groupBy ? Map.groupBy(items, keySelector) : mapGroupByPolyfill(items, keySelector);
|
|
151
157
|
}
|
|
152
|
-
const mapGroupBy = /* @__PURE__ */ (() => !!Map.groupBy)() ? mapGroupByNative : mapGroupByPolyfill;
|
|
153
158
|
function mapValues(object, callback) {
|
|
154
159
|
let result = {};
|
|
155
160
|
for (let [key, value] of Object.entries(object)) result[key] = callback(value, key);
|
|
156
161
|
return result;
|
|
157
162
|
}
|
|
158
|
-
|
|
163
|
+
function objectEntries(obj) {
|
|
164
|
+
return Object.entries(obj);
|
|
165
|
+
}
|
|
159
166
|
function objectGroupByPolyfill(items, keySelector) {
|
|
160
167
|
let result = {}, index = 0;
|
|
161
168
|
for (let item of items) {
|
|
@@ -164,10 +171,9 @@ function objectGroupByPolyfill(items, keySelector) {
|
|
|
164
171
|
}
|
|
165
172
|
return result;
|
|
166
173
|
}
|
|
167
|
-
function
|
|
168
|
-
return Object.groupBy(items, keySelector);
|
|
174
|
+
function objectGroupBy(items, keySelector) {
|
|
175
|
+
return Object.groupBy ? Object.groupBy(items, keySelector) : objectGroupByPolyfill(items, keySelector);
|
|
169
176
|
}
|
|
170
|
-
const objectGroupBy = /* @__PURE__ */ (() => !!Object.groupBy)() ? objectGroupByNative : objectGroupByPolyfill;
|
|
171
177
|
function once(fn) {
|
|
172
178
|
let called = !1, result;
|
|
173
179
|
return () => (called || (result = fn(), called = !0, fn = void 0), result);
|