radashi 12.1.0 → 12.2.0-beta.0dc9c8a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/LICENSE.md +2 -1
  2. package/README.md +124 -17
  3. package/dist/radashi.cjs +1589 -0
  4. package/dist/radashi.d.cts +1212 -0
  5. package/dist/radashi.d.ts +1212 -0
  6. package/dist/radashi.js +1452 -0
  7. package/package.json +51 -40
  8. package/dist/cjs/array.cjs +0 -281
  9. package/dist/cjs/array.cjs.map +0 -1
  10. package/dist/cjs/async.cjs +0 -169
  11. package/dist/cjs/async.cjs.map +0 -1
  12. package/dist/cjs/curry.cjs +0 -113
  13. package/dist/cjs/curry.cjs.map +0 -1
  14. package/dist/cjs/index.cjs +0 -109
  15. package/dist/cjs/index.cjs.map +0 -1
  16. package/dist/cjs/number.cjs +0 -34
  17. package/dist/cjs/number.cjs.map +0 -1
  18. package/dist/cjs/object.cjs +0 -204
  19. package/dist/cjs/object.cjs.map +0 -1
  20. package/dist/cjs/random.cjs +0 -34
  21. package/dist/cjs/random.cjs.map +0 -1
  22. package/dist/cjs/series.cjs +0 -62
  23. package/dist/cjs/series.cjs.map +0 -1
  24. package/dist/cjs/string.cjs +0 -72
  25. package/dist/cjs/string.cjs.map +0 -1
  26. package/dist/cjs/typed.cjs +0 -104
  27. package/dist/cjs/typed.cjs.map +0 -1
  28. package/dist/esm/array.mjs +0 -251
  29. package/dist/esm/array.mjs.map +0 -1
  30. package/dist/esm/async.mjs +0 -158
  31. package/dist/esm/async.mjs.map +0 -1
  32. package/dist/esm/curry.mjs +0 -103
  33. package/dist/esm/curry.mjs.map +0 -1
  34. package/dist/esm/index.mjs +0 -10
  35. package/dist/esm/index.mjs.map +0 -1
  36. package/dist/esm/number.mjs +0 -30
  37. package/dist/esm/number.mjs.map +0 -1
  38. package/dist/esm/object.mjs +0 -186
  39. package/dist/esm/object.mjs.map +0 -1
  40. package/dist/esm/random.mjs +0 -29
  41. package/dist/esm/random.mjs.map +0 -1
  42. package/dist/esm/series.mjs +0 -60
  43. package/dist/esm/series.mjs.map +0 -1
  44. package/dist/esm/string.mjs +0 -63
  45. package/dist/esm/string.mjs.map +0 -1
  46. package/dist/esm/typed.mjs +0 -90
  47. package/dist/esm/typed.mjs.map +0 -1
  48. package/dist/index.d.ts +0 -682
@@ -0,0 +1,1589 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all2) => {
7
+ for (var name in all2)
8
+ __defProp(target, name, { get: all2[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/mod.ts
21
+ var mod_exports = {};
22
+ __export(mod_exports, {
23
+ AggregateError: () => AggregateError,
24
+ all: () => all,
25
+ alphabetical: () => alphabetical,
26
+ assign: () => assign,
27
+ boil: () => boil,
28
+ callable: () => callable,
29
+ camel: () => camel,
30
+ capitalize: () => capitalize,
31
+ chain: () => chain,
32
+ clone: () => clone,
33
+ cluster: () => cluster,
34
+ compose: () => compose,
35
+ construct: () => construct,
36
+ counting: () => counting,
37
+ crush: () => crush,
38
+ dash: () => dash,
39
+ debounce: () => debounce,
40
+ defer: () => defer,
41
+ diff: () => diff,
42
+ draw: () => draw,
43
+ filterKey: () => filterKey,
44
+ first: () => first,
45
+ flat: () => flat,
46
+ flip: () => flip,
47
+ fork: () => fork,
48
+ get: () => get,
49
+ group: () => group,
50
+ guard: () => guard,
51
+ inRange: () => inRange,
52
+ intersects: () => intersects,
53
+ invert: () => invert,
54
+ isArray: () => isArray,
55
+ isDate: () => isDate,
56
+ isEmpty: () => isEmpty,
57
+ isEqual: () => isEqual,
58
+ isFloat: () => isFloat,
59
+ isFunction: () => isFunction,
60
+ isInt: () => isInt,
61
+ isIntString: () => isIntString,
62
+ isMap: () => isMap,
63
+ isNumber: () => isNumber,
64
+ isObject: () => isObject,
65
+ isPlainObject: () => isPlainObject,
66
+ isPrimitive: () => isPrimitive,
67
+ isPromise: () => isPromise,
68
+ isRegExp: () => isRegExp,
69
+ isSet: () => isSet,
70
+ isString: () => isString,
71
+ isSymbol: () => isSymbol,
72
+ isTagged: () => isTagged,
73
+ isWeakMap: () => isWeakMap,
74
+ isWeakSet: () => isWeakSet,
75
+ iterate: () => iterate,
76
+ keys: () => keys,
77
+ last: () => last,
78
+ lerp: () => lerp,
79
+ list: () => list,
80
+ listify: () => listify,
81
+ lowerize: () => lowerize,
82
+ map: () => map,
83
+ mapEntries: () => mapEntries,
84
+ mapKeys: () => mapKeys,
85
+ mapValues: () => mapValues,
86
+ mapify: () => mapify,
87
+ max: () => max,
88
+ memo: () => memo,
89
+ merge: () => merge,
90
+ min: () => min,
91
+ objectify: () => objectify,
92
+ omit: () => omit,
93
+ once: () => once,
94
+ parallel: () => parallel,
95
+ partial: () => partial,
96
+ partob: () => partob,
97
+ pascal: () => pascal,
98
+ pick: () => pick,
99
+ proxied: () => proxied,
100
+ random: () => random,
101
+ range: () => range,
102
+ reduce: () => reduce,
103
+ replace: () => replace,
104
+ replaceOrAppend: () => replaceOrAppend,
105
+ retry: () => retry,
106
+ round: () => round,
107
+ select: () => select,
108
+ selectFirst: () => selectFirst,
109
+ series: () => series,
110
+ set: () => set,
111
+ shake: () => shake,
112
+ shift: () => shift,
113
+ shuffle: () => shuffle,
114
+ sift: () => sift,
115
+ sleep: () => sleep,
116
+ snake: () => snake,
117
+ sort: () => sort,
118
+ sum: () => sum,
119
+ template: () => template,
120
+ throttle: () => throttle,
121
+ title: () => title,
122
+ toFloat: () => toFloat,
123
+ toInt: () => toInt,
124
+ toggle: () => toggle,
125
+ trim: () => trim,
126
+ try: () => tryit,
127
+ tryit: () => tryit,
128
+ uid: () => uid,
129
+ unique: () => unique,
130
+ unzip: () => unzip,
131
+ upperize: () => upperize,
132
+ zip: () => zip,
133
+ zipToObject: () => zipToObject
134
+ });
135
+ module.exports = __toCommonJS(mod_exports);
136
+
137
+ // src/array/alphabetical.ts
138
+ function alphabetical(array, getter, direction = "asc") {
139
+ if (!array) {
140
+ return [];
141
+ }
142
+ const asc = (a, b) => `${getter(a)}`.localeCompare(getter(b));
143
+ const dsc = (a, b) => `${getter(b)}`.localeCompare(getter(a));
144
+ return array.slice().sort(direction === "desc" ? dsc : asc);
145
+ }
146
+
147
+ // src/array/boil.ts
148
+ function boil(array, compareFunc) {
149
+ if (!array || (array.length ?? 0) === 0) {
150
+ return null;
151
+ }
152
+ return array.reduce(compareFunc);
153
+ }
154
+
155
+ // src/array/cluster.ts
156
+ function cluster(array, size = 2) {
157
+ const clusters = [];
158
+ for (let i = 0; i < array.length; i += size) {
159
+ clusters.push(array.slice(i, i + size));
160
+ }
161
+ return clusters;
162
+ }
163
+
164
+ // src/array/counting.ts
165
+ function counting(array, identity) {
166
+ if (!array) {
167
+ return {};
168
+ }
169
+ return array.reduce(
170
+ (acc, item) => {
171
+ const id = identity(item);
172
+ acc[id] = (acc[id] ?? 0) + 1;
173
+ return acc;
174
+ },
175
+ {}
176
+ );
177
+ }
178
+
179
+ // src/array/diff.ts
180
+ function diff(root, other, identity = (t) => t) {
181
+ if (!(root == null ? void 0 : root.length) && !(other == null ? void 0 : other.length)) {
182
+ return [];
183
+ }
184
+ if ((root == null ? void 0 : root.length) === void 0) {
185
+ return [...other];
186
+ }
187
+ if (!(other == null ? void 0 : other.length)) {
188
+ return [...root];
189
+ }
190
+ const bKeys = other.reduce(
191
+ (acc, item) => {
192
+ acc[identity(item)] = true;
193
+ return acc;
194
+ },
195
+ {}
196
+ );
197
+ return root.filter((a) => !bKeys[identity(a)]);
198
+ }
199
+
200
+ // src/array/first.ts
201
+ function first(array, defaultValue) {
202
+ return (array == null ? void 0 : array.length) > 0 ? array[0] : defaultValue;
203
+ }
204
+
205
+ // src/array/flat.ts
206
+ function flat(lists) {
207
+ return lists.reduce((acc, list2) => {
208
+ acc.push(...list2);
209
+ return acc;
210
+ }, []);
211
+ }
212
+
213
+ // src/array/fork.ts
214
+ function fork(array, condition) {
215
+ const forked = [[], []];
216
+ if (array) {
217
+ for (const item of array) {
218
+ forked[condition(item) ? 0 : 1].push(item);
219
+ }
220
+ }
221
+ return forked;
222
+ }
223
+
224
+ // src/array/group.ts
225
+ function group(array, getGroupId) {
226
+ return array.reduce(
227
+ (acc, item) => {
228
+ const groupId = getGroupId(item);
229
+ if (!acc[groupId]) {
230
+ acc[groupId] = [];
231
+ }
232
+ acc[groupId].push(item);
233
+ return acc;
234
+ },
235
+ {}
236
+ );
237
+ }
238
+
239
+ // src/array/intersects.ts
240
+ function intersects(listA, listB, identity) {
241
+ if (!listA || !listB) {
242
+ return false;
243
+ }
244
+ if (identity) {
245
+ const known = new Set(listA.map(identity));
246
+ return listB.some((item) => known.has(identity(item)));
247
+ }
248
+ return listB.some((item) => listA.includes(item));
249
+ }
250
+
251
+ // src/array/iterate.ts
252
+ function iterate(count, func, initValue) {
253
+ let value = initValue;
254
+ for (let i = 1; i <= count; i++) {
255
+ value = func(value, i);
256
+ }
257
+ return value;
258
+ }
259
+
260
+ // src/array/last.ts
261
+ function last(array, defaultValue) {
262
+ return (array == null ? void 0 : array.length) > 0 ? array[array.length - 1] : defaultValue;
263
+ }
264
+
265
+ // src/array/list.ts
266
+ function list(startOrLength, end, valueOrMapper, step) {
267
+ return Array.from(range(startOrLength, end, valueOrMapper, step));
268
+ }
269
+
270
+ // src/array/mapify.ts
271
+ function mapify(array, getKey, getValue = (item) => item) {
272
+ const map2 = /* @__PURE__ */ new Map();
273
+ for (const item of array) {
274
+ map2.set(getKey(item), getValue(item));
275
+ }
276
+ return map2;
277
+ }
278
+
279
+ // src/array/max.ts
280
+ function max(array, getter) {
281
+ if (!array || (array.length ?? 0) === 0) {
282
+ return null;
283
+ }
284
+ const get2 = getter ?? ((v) => v);
285
+ return array.reduce((a, b) => get2(a) > get2(b) ? a : b);
286
+ }
287
+
288
+ // src/array/merge.ts
289
+ function merge(prev, array, toKey) {
290
+ if (!array && !prev) {
291
+ return [];
292
+ }
293
+ if (!array) {
294
+ return [...prev];
295
+ }
296
+ if (!prev) {
297
+ return [];
298
+ }
299
+ if (!toKey) {
300
+ return [...prev];
301
+ }
302
+ const keys2 = array.map(toKey);
303
+ return prev.map((prevItem) => {
304
+ const index = keys2.indexOf(toKey(prevItem));
305
+ return index > -1 ? array[index] : prevItem;
306
+ });
307
+ }
308
+
309
+ // src/array/min.ts
310
+ function min(array, getter) {
311
+ if (!array || (array.length ?? 0) === 0) {
312
+ return null;
313
+ }
314
+ const get2 = getter ?? ((v) => v);
315
+ return array.reduce((a, b) => get2(a) < get2(b) ? a : b);
316
+ }
317
+
318
+ // src/array/objectify.ts
319
+ function objectify(array, getKey, getValue = (item) => item) {
320
+ return array.reduce(
321
+ (acc, item) => {
322
+ acc[getKey(item)] = getValue(item);
323
+ return acc;
324
+ },
325
+ {}
326
+ );
327
+ }
328
+
329
+ // src/array/range.ts
330
+ function* range(startOrLength, end, valueOrMapper = (i) => i, step = 1) {
331
+ const mapper = isFunction(valueOrMapper) ? valueOrMapper : () => valueOrMapper;
332
+ const start = end ? startOrLength : 0;
333
+ const final = end ?? startOrLength;
334
+ for (let i = start; i <= final; i += step) {
335
+ yield mapper(i);
336
+ if (i + step > final) {
337
+ break;
338
+ }
339
+ }
340
+ }
341
+
342
+ // src/array/replace.ts
343
+ function replace(array, newItem, match) {
344
+ if (!array) {
345
+ return [];
346
+ }
347
+ if (newItem === void 0) {
348
+ return [...array];
349
+ }
350
+ const out = array.slice();
351
+ for (let index = 0; index < array.length; index++) {
352
+ if (match(array[index], index)) {
353
+ out[index] = newItem;
354
+ break;
355
+ }
356
+ }
357
+ return out;
358
+ }
359
+
360
+ // src/array/replaceOrAppend.ts
361
+ function replaceOrAppend(array, newItem, match) {
362
+ if (!array && !newItem) {
363
+ return [];
364
+ }
365
+ if (!newItem) {
366
+ return [...array];
367
+ }
368
+ if (!array) {
369
+ return [newItem];
370
+ }
371
+ const out = array.slice();
372
+ for (let index = 0; index < array.length; index++) {
373
+ if (match(array[index], index)) {
374
+ out[index] = newItem;
375
+ return out;
376
+ }
377
+ }
378
+ out.push(newItem);
379
+ return out;
380
+ }
381
+
382
+ // src/array/select.ts
383
+ function select(array, mapper, condition) {
384
+ if (!array) {
385
+ return [];
386
+ }
387
+ let mapped;
388
+ return array.reduce((acc, item, index) => {
389
+ if (condition) {
390
+ condition(item, index) && acc.push(mapper(item, index));
391
+ } else if ((mapped = mapper(item, index)) != null) {
392
+ acc.push(mapped);
393
+ }
394
+ return acc;
395
+ }, []);
396
+ }
397
+
398
+ // src/array/selectFirst.ts
399
+ function selectFirst(array, mapper, condition) {
400
+ if (!array) {
401
+ return void 0;
402
+ }
403
+ let foundIndex = -1;
404
+ const found = array.find((item, index) => {
405
+ foundIndex = index;
406
+ return condition ? condition(item, index) : mapper(item, index) != null;
407
+ });
408
+ return found === void 0 ? void 0 : mapper(found, foundIndex);
409
+ }
410
+
411
+ // src/array/shift.ts
412
+ function shift(arr, n) {
413
+ if (arr.length === 0) {
414
+ return arr;
415
+ }
416
+ const shiftNumber = n % arr.length;
417
+ if (shiftNumber === 0) {
418
+ return arr;
419
+ }
420
+ return [...arr.slice(-shiftNumber, arr.length), ...arr.slice(0, -shiftNumber)];
421
+ }
422
+
423
+ // src/array/sift.ts
424
+ function sift(array) {
425
+ return (array == null ? void 0 : array.filter((x) => !!x)) ?? [];
426
+ }
427
+
428
+ // src/array/sort.ts
429
+ function sort(array, getter, desc = false) {
430
+ if (!array) {
431
+ return [];
432
+ }
433
+ const asc = (a, b) => getter(a) - getter(b);
434
+ const dsc = (a, b) => getter(b) - getter(a);
435
+ return array.slice().sort(desc === true ? dsc : asc);
436
+ }
437
+
438
+ // src/array/sum.ts
439
+ function sum(array, fn) {
440
+ return (array || []).reduce((acc, item) => acc + (fn ? fn(item) : item), 0);
441
+ }
442
+
443
+ // src/array/toggle.ts
444
+ function toggle(array, item, toKey, options) {
445
+ if (!array) {
446
+ return item !== void 0 ? [item] : [];
447
+ }
448
+ if (item === void 0) {
449
+ return [...array];
450
+ }
451
+ const matcher = toKey ? (x, idx) => toKey(x, idx) === toKey(item, idx) : (x) => x === item;
452
+ const existing = array.find(matcher);
453
+ if (existing !== void 0) {
454
+ return array.filter((x, idx) => !matcher(x, idx));
455
+ }
456
+ return (options == null ? void 0 : options.strategy) === "prepend" ? [item, ...array] : [...array, item];
457
+ }
458
+
459
+ // src/array/unique.ts
460
+ function unique(array, toKey) {
461
+ if (toKey) {
462
+ const keys2 = /* @__PURE__ */ new Set();
463
+ return array.reduce((acc, item) => {
464
+ const key = toKey(item);
465
+ if (!keys2.has(key)) {
466
+ keys2.add(key);
467
+ acc.push(item);
468
+ }
469
+ return acc;
470
+ }, []);
471
+ }
472
+ return [...new Set(array)];
473
+ }
474
+
475
+ // src/array/unzip.ts
476
+ function unzip(arrays) {
477
+ if (!arrays || !arrays.length) {
478
+ return [];
479
+ }
480
+ const out = new Array(
481
+ arrays.reduce((max2, arr) => Math.max(max2, arr.length), 0)
482
+ );
483
+ let index = 0;
484
+ const get2 = (array) => array[index];
485
+ for (; index < out.length; index++) {
486
+ out[index] = Array.from(arrays, get2);
487
+ }
488
+ return out;
489
+ }
490
+
491
+ // src/array/zip.ts
492
+ function zip(...arrays) {
493
+ return unzip(arrays);
494
+ }
495
+
496
+ // src/array/zipToObject.ts
497
+ function zipToObject(keys2, values) {
498
+ if (!keys2 || !keys2.length) {
499
+ return {};
500
+ }
501
+ const getValue = isFunction(values) ? values : isArray(values) ? (_k, i) => values[i] : (_k, _i) => values;
502
+ return keys2.reduce(
503
+ (acc, key, idx) => {
504
+ acc[key] = getValue(key, idx);
505
+ return acc;
506
+ },
507
+ {}
508
+ );
509
+ }
510
+
511
+ // src/async/AggregateError.ts
512
+ var AggregateError = class extends Error {
513
+ errors;
514
+ constructor(errors = []) {
515
+ var _a, _b;
516
+ super();
517
+ const name = ((_a = errors.find((e) => e.name)) == null ? void 0 : _a.name) ?? "";
518
+ this.name = `AggregateError(${name}...)`;
519
+ this.message = `AggregateError with ${errors.length} errors`;
520
+ this.stack = ((_b = errors.find((e) => e.stack)) == null ? void 0 : _b.stack) ?? this.stack;
521
+ this.errors = errors;
522
+ }
523
+ };
524
+
525
+ // src/async/all.ts
526
+ async function all(promises) {
527
+ const entries = isArray(promises) ? promises.map((p) => [null, p]) : Object.entries(promises);
528
+ const results = await Promise.all(
529
+ entries.map(
530
+ ([key, value]) => value.then((result) => ({ result, exc: null, key })).catch((exc) => ({ result: null, exc, key }))
531
+ )
532
+ );
533
+ const exceptions = results.filter((r) => r.exc);
534
+ if (exceptions.length > 0) {
535
+ throw new AggregateError(exceptions.map((e) => e.exc));
536
+ }
537
+ if (isArray(promises)) {
538
+ return results.map((r) => r.result);
539
+ }
540
+ return results.reduce(
541
+ (acc, item) => {
542
+ acc[item.key] = item.result;
543
+ return acc;
544
+ },
545
+ {}
546
+ );
547
+ }
548
+
549
+ // src/async/defer.ts
550
+ async function defer(func) {
551
+ const callbacks = [];
552
+ const register = (fn, options) => callbacks.push({
553
+ fn,
554
+ rethrow: (options == null ? void 0 : options.rethrow) ?? false
555
+ });
556
+ const [err, response] = await tryit(func)(register);
557
+ for (const { fn, rethrow } of callbacks) {
558
+ const [rethrown] = await tryit(fn)(err);
559
+ if (rethrown && rethrow) {
560
+ throw rethrown;
561
+ }
562
+ }
563
+ if (err) {
564
+ throw err;
565
+ }
566
+ return response;
567
+ }
568
+
569
+ // src/async/guard.ts
570
+ function guard(func, shouldGuard) {
571
+ const _guard = (err) => {
572
+ if (shouldGuard && !shouldGuard(err)) {
573
+ throw err;
574
+ }
575
+ return void 0;
576
+ };
577
+ try {
578
+ const result = func();
579
+ return result instanceof Promise ? result.catch(_guard) : result;
580
+ } catch (err) {
581
+ return _guard(err);
582
+ }
583
+ }
584
+
585
+ // src/async/map.ts
586
+ async function map(array, asyncMapFunc) {
587
+ if (!array) {
588
+ return [];
589
+ }
590
+ const result = [];
591
+ let index = 0;
592
+ for (const value of array) {
593
+ const newValue = await asyncMapFunc(value, index++);
594
+ result.push(newValue);
595
+ }
596
+ return result;
597
+ }
598
+
599
+ // src/async/parallel.ts
600
+ async function parallel(limit, array, func) {
601
+ const work = array.map((item, index) => ({
602
+ index,
603
+ item
604
+ }));
605
+ const processor = async (res) => {
606
+ const results2 = [];
607
+ while (true) {
608
+ const next = work.pop();
609
+ if (!next) {
610
+ return res(results2);
611
+ }
612
+ const [error, result] = await tryit(func)(next.item);
613
+ results2.push({
614
+ error,
615
+ result,
616
+ index: next.index
617
+ });
618
+ }
619
+ };
620
+ const queues = list(1, limit).map(() => new Promise(processor));
621
+ const itemResults = await Promise.all(queues);
622
+ const [errors, results] = fork(
623
+ sort(itemResults.flat(), (r) => r.index),
624
+ (x) => !!x.error
625
+ );
626
+ if (errors.length > 0) {
627
+ throw new AggregateError(errors.map((error) => error.error));
628
+ }
629
+ return results.map((r) => r.result);
630
+ }
631
+
632
+ // src/async/reduce.ts
633
+ async function reduce(array, asyncReducer, initValue) {
634
+ const initProvided = initValue !== void 0;
635
+ if (!initProvided && (array == null ? void 0 : array.length) < 1) {
636
+ throw new Error("Cannot reduce empty array with no init value");
637
+ }
638
+ const iter = initProvided ? array : array.slice(1);
639
+ let value = initProvided ? initValue : array[0];
640
+ for (const [i, item] of iter.entries()) {
641
+ value = await asyncReducer(value, item, i);
642
+ }
643
+ return value;
644
+ }
645
+
646
+ // src/async/retry.ts
647
+ async function retry(options, func) {
648
+ const times = (options == null ? void 0 : options.times) ?? 3;
649
+ const delay = options == null ? void 0 : options.delay;
650
+ const backoff = (options == null ? void 0 : options.backoff) ?? null;
651
+ let i = 0;
652
+ while (true) {
653
+ const [err, result] = await tryit(func)((err2) => {
654
+ throw { _exited: err2 };
655
+ });
656
+ if (!err) {
657
+ return result;
658
+ }
659
+ if (err._exited) {
660
+ throw err._exited;
661
+ }
662
+ if (++i >= times) {
663
+ throw err;
664
+ }
665
+ if (delay) {
666
+ await sleep(delay);
667
+ }
668
+ if (backoff) {
669
+ await sleep(backoff(i));
670
+ }
671
+ }
672
+ }
673
+
674
+ // src/async/sleep.ts
675
+ function sleep(milliseconds) {
676
+ return new Promise((res) => setTimeout(res, milliseconds));
677
+ }
678
+
679
+ // src/async/tryit.ts
680
+ function tryit(func) {
681
+ return (...args) => {
682
+ try {
683
+ const result = func(...args);
684
+ if (isPromise(result)) {
685
+ return result.then((value) => [void 0, value]).catch((err) => [err, void 0]);
686
+ }
687
+ return [void 0, result];
688
+ } catch (err) {
689
+ return [err, void 0];
690
+ }
691
+ };
692
+ }
693
+
694
+ // src/curry/callable.ts
695
+ function callable(obj, fn) {
696
+ return new Proxy(Object.assign(fn.bind(null), obj), {
697
+ get: (target, key) => target[key],
698
+ set: (target, key, value) => {
699
+ ;
700
+ target[key] = value;
701
+ return true;
702
+ },
703
+ apply: (target, _, args) => fn(Object.assign({}, target))(...args)
704
+ });
705
+ }
706
+
707
+ // src/curry/chain.ts
708
+ function chain(...funcs) {
709
+ return (...args) => {
710
+ return funcs.slice(1).reduce((acc, fn) => fn(acc), funcs[0](...args));
711
+ };
712
+ }
713
+
714
+ // src/curry/compose.ts
715
+ function compose(...funcs) {
716
+ return funcs.reverse().reduce((acc, fn) => fn(acc));
717
+ }
718
+
719
+ // src/curry/debounce.ts
720
+ function debounce({ delay }, func) {
721
+ let timer = void 0;
722
+ let active = true;
723
+ const debounced = (...args) => {
724
+ if (active) {
725
+ clearTimeout(timer);
726
+ timer = setTimeout(() => {
727
+ active && func(...args);
728
+ timer = void 0;
729
+ }, delay);
730
+ } else {
731
+ func(...args);
732
+ }
733
+ };
734
+ debounced.isPending = () => {
735
+ return timer !== void 0;
736
+ };
737
+ debounced.cancel = () => {
738
+ active = false;
739
+ };
740
+ debounced.flush = (...args) => func(...args);
741
+ return debounced;
742
+ }
743
+
744
+ // src/curry/flip.ts
745
+ function flip(fn) {
746
+ return (arg2, arg1, ...args) => fn(arg1, arg2, ...args);
747
+ }
748
+
749
+ // src/curry/memo.ts
750
+ function memoize(cache, func, keyFunc, ttl) {
751
+ return function callWithMemo(...args) {
752
+ const key = keyFunc ? keyFunc(...args) : JSON.stringify({ args });
753
+ const existing = cache[key];
754
+ if (existing !== void 0) {
755
+ if (!existing.exp) {
756
+ return existing.value;
757
+ }
758
+ if (existing.exp > (/* @__PURE__ */ new Date()).getTime()) {
759
+ return existing.value;
760
+ }
761
+ }
762
+ const result = func(...args);
763
+ cache[key] = {
764
+ exp: ttl ? (/* @__PURE__ */ new Date()).getTime() + ttl : null,
765
+ value: result
766
+ };
767
+ return result;
768
+ };
769
+ }
770
+ function memo(func, options = {}) {
771
+ return memoize({}, func, options.key ?? null, options.ttl ?? null);
772
+ }
773
+
774
+ // src/curry/once.ts
775
+ var onceSymbol = Symbol();
776
+ var once = (fn) => {
777
+ const onceFn = function(...args) {
778
+ if (onceFn[onceSymbol] === onceSymbol) {
779
+ onceFn[onceSymbol] = fn.apply(this, args);
780
+ }
781
+ return onceFn[onceSymbol];
782
+ };
783
+ onceFn[onceSymbol] = onceSymbol;
784
+ return onceFn;
785
+ };
786
+ once.reset = (fn) => {
787
+ fn[onceSymbol] = onceSymbol;
788
+ };
789
+
790
+ // src/curry/partial.ts
791
+ function partial(fn, ...args) {
792
+ return (...rest) => fn(...[...args, ...rest]);
793
+ }
794
+
795
+ // src/curry/partob.ts
796
+ function partob(fn, argobj) {
797
+ return (restobj) => fn({ ...argobj, ...restobj });
798
+ }
799
+
800
+ // src/curry/proxied.ts
801
+ function proxied(handler) {
802
+ return new Proxy(
803
+ {},
804
+ {
805
+ get: (target, propertyName) => handler(propertyName)
806
+ }
807
+ );
808
+ }
809
+
810
+ // src/curry/throttle.ts
811
+ function throttle({ interval }, func) {
812
+ let ready = true;
813
+ let timer = void 0;
814
+ const throttled = (...args) => {
815
+ if (!ready) {
816
+ return;
817
+ }
818
+ func(...args);
819
+ ready = false;
820
+ timer = setTimeout(() => {
821
+ ready = true;
822
+ timer = void 0;
823
+ }, interval);
824
+ };
825
+ throttled.isThrottled = () => {
826
+ return timer !== void 0;
827
+ };
828
+ return throttled;
829
+ }
830
+
831
+ // src/number/inRange.ts
832
+ function inRange(number, start, end) {
833
+ const isTypeSafe = typeof number === "number" && typeof start === "number" && (typeof end === "undefined" || typeof end === "number");
834
+ if (!isTypeSafe) {
835
+ return false;
836
+ }
837
+ if (typeof end === "undefined") {
838
+ end = start;
839
+ start = 0;
840
+ }
841
+ return number >= Math.min(start, end) && number < Math.max(start, end);
842
+ }
843
+
844
+ // src/number/lerp.ts
845
+ function lerp(from, to, amount) {
846
+ return from + (to - from) * amount;
847
+ }
848
+
849
+ // src/number/round.ts
850
+ function round(value, precision, toInteger = Math.round) {
851
+ if (precision) {
852
+ const p = precision > 0 ? Math.min(precision, 292) : Math.max(precision, -323);
853
+ let [q, e] = `${value}e`.split("e");
854
+ [q, e] = `${toInteger(+`${q}e${+e + p}`)}e`.split("e");
855
+ return +`${q}e${+e - p}`;
856
+ }
857
+ return toInteger(value);
858
+ }
859
+
860
+ // src/number/toFloat.ts
861
+ function toFloat(value, defaultValue) {
862
+ const parsedValue = isSymbol(value) ? Number.NaN : Number.parseFloat(value);
863
+ return Number.isNaN(parsedValue) ? defaultValue !== void 0 ? defaultValue : 0 : parsedValue;
864
+ }
865
+
866
+ // src/number/toInt.ts
867
+ function toInt(value, defaultValue) {
868
+ const parsedValue = isSymbol(value) ? Number.NaN : Number.parseInt(value);
869
+ return Number.isNaN(parsedValue) ? defaultValue !== void 0 ? defaultValue : 0 : parsedValue;
870
+ }
871
+
872
+ // src/object/assign.ts
873
+ function assign(initial, override) {
874
+ if (!initial || !override) {
875
+ return initial ?? override ?? {};
876
+ }
877
+ const proto = Object.getPrototypeOf(initial);
878
+ const merged = proto ? { ...initial } : Object.assign(Object.create(proto), initial);
879
+ for (const key in override) {
880
+ if (Object.prototype.hasOwnProperty.call(override, key)) {
881
+ merged[key] = isPlainObject(initial[key]) ? assign(initial[key], override[key]) : override[key];
882
+ }
883
+ }
884
+ return merged;
885
+ }
886
+
887
+ // src/object/clone.ts
888
+ function clone(obj) {
889
+ if (isPrimitive(obj)) {
890
+ return obj;
891
+ }
892
+ if (typeof obj === "function") {
893
+ return obj.bind({});
894
+ }
895
+ const proto = Object.getPrototypeOf(obj);
896
+ const newObj = typeof (proto == null ? void 0 : proto.constructor) === "function" ? new proto.constructor() : Object.create(proto);
897
+ for (const key of Object.getOwnPropertyNames(obj)) {
898
+ newObj[key] = obj[key];
899
+ }
900
+ return newObj;
901
+ }
902
+
903
+ // src/object/construct.ts
904
+ function construct(obj) {
905
+ if (!obj) {
906
+ return {};
907
+ }
908
+ return Object.keys(obj).reduce((acc, path) => {
909
+ return set(acc, path, obj[path]);
910
+ }, {});
911
+ }
912
+
913
+ // src/object/crush.ts
914
+ function crush(value) {
915
+ if (!value) {
916
+ return {};
917
+ }
918
+ return objectify(
919
+ keys(value),
920
+ (k) => k,
921
+ (k) => get(value, k)
922
+ );
923
+ }
924
+
925
+ // src/object/filterKey.ts
926
+ function filterKey(obj, key, filter) {
927
+ return Object.hasOwnProperty.call(obj, key) && (filter == null || (isArray(filter) ? filter.includes(key) : filter(obj[key], key, obj)));
928
+ }
929
+
930
+ // src/object/get.ts
931
+ function get(value, path, defaultValue) {
932
+ const segments = path.split(/[\.\[\]]/g);
933
+ let current = value;
934
+ for (const key of segments) {
935
+ if (current === null) {
936
+ return defaultValue;
937
+ }
938
+ if (current === void 0) {
939
+ return defaultValue;
940
+ }
941
+ const dequoted = key.replace(/['"]/g, "");
942
+ if (dequoted.trim() === "") {
943
+ continue;
944
+ }
945
+ current = current[dequoted];
946
+ }
947
+ if (current === void 0) {
948
+ return defaultValue;
949
+ }
950
+ return current;
951
+ }
952
+
953
+ // src/object/invert.ts
954
+ function invert(obj) {
955
+ if (!obj) {
956
+ return {};
957
+ }
958
+ const keys2 = Object.keys(obj);
959
+ return keys2.reduce(
960
+ (acc, key) => {
961
+ acc[obj[key]] = key;
962
+ return acc;
963
+ },
964
+ {}
965
+ );
966
+ }
967
+
968
+ // src/object/keys.ts
969
+ function keys(value) {
970
+ if (!value) {
971
+ return [];
972
+ }
973
+ const keys2 = [];
974
+ const keyPath = [];
975
+ const recurse = (value2) => {
976
+ if (isPlainObject(value2)) {
977
+ for (const [prop, propValue] of Object.entries(value2)) {
978
+ keyPath.push(prop);
979
+ recurse(propValue);
980
+ keyPath.pop();
981
+ }
982
+ } else if (isArray(value2)) {
983
+ value2.forEach((item, index) => {
984
+ keyPath.push(index);
985
+ recurse(item);
986
+ keyPath.pop();
987
+ });
988
+ } else {
989
+ keys2.push(keyPath.join("."));
990
+ }
991
+ };
992
+ recurse(value);
993
+ return keys2;
994
+ }
995
+
996
+ // src/object/listify.ts
997
+ function listify(obj, toItem) {
998
+ if (!obj) {
999
+ return [];
1000
+ }
1001
+ const entries = Object.entries(obj);
1002
+ if (entries.length === 0) {
1003
+ return [];
1004
+ }
1005
+ return entries.reduce((acc, entry) => {
1006
+ acc.push(toItem(entry[0], entry[1]));
1007
+ return acc;
1008
+ }, []);
1009
+ }
1010
+
1011
+ // src/object/lowerize.ts
1012
+ function lowerize(obj) {
1013
+ return mapKeys(obj, (k) => k.toLowerCase());
1014
+ }
1015
+
1016
+ // src/object/mapEntries.ts
1017
+ function mapEntries(obj, toEntry) {
1018
+ if (!obj) {
1019
+ return {};
1020
+ }
1021
+ return Object.entries(obj).reduce(
1022
+ (acc, [key, value]) => {
1023
+ const [newKey, newValue] = toEntry(key, value);
1024
+ acc[newKey] = newValue;
1025
+ return acc;
1026
+ },
1027
+ {}
1028
+ );
1029
+ }
1030
+
1031
+ // src/object/mapKeys.ts
1032
+ function mapKeys(obj, mapFunc) {
1033
+ const keys2 = Object.keys(obj);
1034
+ return keys2.reduce(
1035
+ (acc, key) => {
1036
+ acc[mapFunc(key, obj[key])] = obj[key];
1037
+ return acc;
1038
+ },
1039
+ {}
1040
+ );
1041
+ }
1042
+
1043
+ // src/object/mapValues.ts
1044
+ function mapValues(obj, mapFunc) {
1045
+ const keys2 = Object.keys(obj);
1046
+ return keys2.reduce(
1047
+ (acc, key) => {
1048
+ acc[key] = mapFunc(obj[key], key);
1049
+ return acc;
1050
+ },
1051
+ {}
1052
+ );
1053
+ }
1054
+
1055
+ // src/object/omit.ts
1056
+ function omit(obj, keys2) {
1057
+ if (!obj) {
1058
+ return {};
1059
+ }
1060
+ if (!keys2 || keys2.length === 0) {
1061
+ return obj;
1062
+ }
1063
+ return keys2.reduce(
1064
+ (acc, key) => {
1065
+ delete acc[key];
1066
+ return acc;
1067
+ },
1068
+ { ...obj }
1069
+ );
1070
+ }
1071
+
1072
+ // src/object/pick.ts
1073
+ function pick(obj, filter) {
1074
+ if (!obj) {
1075
+ return {};
1076
+ }
1077
+ let keys2 = filter;
1078
+ if (isArray(filter)) {
1079
+ filter = null;
1080
+ } else {
1081
+ keys2 = Reflect.ownKeys(obj);
1082
+ }
1083
+ return keys2.reduce((acc, key) => {
1084
+ if (filterKey(obj, key, filter)) {
1085
+ acc[key] = obj[key];
1086
+ }
1087
+ return acc;
1088
+ }, {});
1089
+ }
1090
+
1091
+ // src/object/set.ts
1092
+ function set(initial, path, value) {
1093
+ if (!initial) {
1094
+ return {};
1095
+ }
1096
+ if (!path || value === void 0) {
1097
+ return initial;
1098
+ }
1099
+ const root = clone(initial);
1100
+ const keys2 = path.match(/[^.[\]]+/g);
1101
+ if (keys2) {
1102
+ keys2.reduce(
1103
+ (object, key, i) => i < keys2.length - 1 ? object[key] ??= isIntString(keys2[i + 1]) ? [] : {} : object[key] = value,
1104
+ root
1105
+ );
1106
+ }
1107
+ return root;
1108
+ }
1109
+
1110
+ // src/object/shake.ts
1111
+ function shake(obj, filter = (value) => value === void 0) {
1112
+ if (!obj) {
1113
+ return {};
1114
+ }
1115
+ const keys2 = Object.keys(obj);
1116
+ return keys2.reduce((acc, key) => {
1117
+ if (!filter(obj[key])) {
1118
+ acc[key] = obj[key];
1119
+ }
1120
+ return acc;
1121
+ }, {});
1122
+ }
1123
+
1124
+ // src/object/upperize.ts
1125
+ function upperize(obj) {
1126
+ return mapKeys(obj, (k) => k.toUpperCase());
1127
+ }
1128
+
1129
+ // src/random/draw.ts
1130
+ function draw(array) {
1131
+ const max2 = array.length;
1132
+ if (max2 === 0) {
1133
+ return null;
1134
+ }
1135
+ const index = random(0, max2 - 1);
1136
+ return array[index];
1137
+ }
1138
+
1139
+ // src/random/random.ts
1140
+ function random(min2, max2) {
1141
+ return Math.floor(Math.random() * (max2 - min2 + 1) + min2);
1142
+ }
1143
+
1144
+ // src/random/shuffle.ts
1145
+ function shuffle(array, random2 = random) {
1146
+ const newArray = array.slice();
1147
+ for (let idx = 0, randomIdx, item; idx < array.length; idx++) {
1148
+ randomIdx = random2(0, array.length - 1);
1149
+ item = newArray[randomIdx];
1150
+ newArray[randomIdx] = newArray[idx];
1151
+ newArray[idx] = item;
1152
+ }
1153
+ return newArray;
1154
+ }
1155
+
1156
+ // src/random/uid.ts
1157
+ function uid(length, specials = "") {
1158
+ const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" + specials;
1159
+ return iterate(
1160
+ length,
1161
+ (acc) => {
1162
+ return acc + characters.charAt(random(0, characters.length - 1));
1163
+ },
1164
+ ""
1165
+ );
1166
+ }
1167
+
1168
+ // src/series/series.ts
1169
+ var series = (items, toKey = (item) => `${item}`) => {
1170
+ const indexesByKey = {};
1171
+ const itemsByIndex = {};
1172
+ for (const idx of range(items.length - 1)) {
1173
+ const item = items[idx];
1174
+ indexesByKey[toKey(item)] = idx;
1175
+ itemsByIndex[idx] = item;
1176
+ }
1177
+ const first2 = () => itemsByIndex[0];
1178
+ const last2 = () => itemsByIndex[items.length - 1];
1179
+ const next = (current, defaultValue) => itemsByIndex[indexesByKey[toKey(current)] + 1] ?? defaultValue ?? first2();
1180
+ const previous = (current, defaultValue) => itemsByIndex[indexesByKey[toKey(current)] - 1] ?? defaultValue ?? last2();
1181
+ return {
1182
+ /**
1183
+ * Given two values in the series, returns the value that occurs
1184
+ * earlier in the series.
1185
+ */
1186
+ min(a, b) {
1187
+ return indexesByKey[toKey(a)] < indexesByKey[toKey(b)] ? a : b;
1188
+ },
1189
+ /**
1190
+ * Given two values in the series, returns the value that occurs
1191
+ * later in the series.
1192
+ */
1193
+ max(a, b) {
1194
+ return indexesByKey[toKey(a)] > indexesByKey[toKey(b)] ? a : b;
1195
+ },
1196
+ first: first2,
1197
+ last: last2,
1198
+ next,
1199
+ previous,
1200
+ /**
1201
+ * A more dynamic method than `next` and `previous` that lets you move
1202
+ * many times in either direction.
1203
+ *
1204
+ * ```ts
1205
+ * series(weekdays).spin('wednesday', 3) // => 'monday'
1206
+ * series(weekdays).spin('wednesday', -3) // => 'friday'
1207
+ * ```
1208
+ */
1209
+ spin(current, num) {
1210
+ if (num === 0) {
1211
+ return current;
1212
+ }
1213
+ const abs = Math.abs(num);
1214
+ const rel = abs > items.length ? abs % items.length : abs;
1215
+ return list(0, rel - 1).reduce(
1216
+ (acc) => num > 0 ? next(acc) : previous(acc),
1217
+ current
1218
+ );
1219
+ }
1220
+ };
1221
+ };
1222
+
1223
+ // src/string/camel.ts
1224
+ function camel(str) {
1225
+ var _a;
1226
+ const parts = ((_a = str == null ? void 0 : str.replace(/([A-Z])+/g, capitalize)) == null ? void 0 : _a.split(/(?=[A-Z])|[\.\-\s_]/).map((x) => x.toLowerCase())) ?? [];
1227
+ if (parts.length === 0) {
1228
+ return "";
1229
+ }
1230
+ if (parts.length === 1) {
1231
+ return parts[0];
1232
+ }
1233
+ return parts.reduce((acc, part) => {
1234
+ return `${acc}${part.charAt(0).toUpperCase()}${part.slice(1)}`;
1235
+ });
1236
+ }
1237
+
1238
+ // src/string/capitalize.ts
1239
+ function capitalize(str) {
1240
+ if (!str || str.length === 0) {
1241
+ return "";
1242
+ }
1243
+ const lower = str.toLowerCase();
1244
+ return lower.substring(0, 1).toUpperCase() + lower.substring(1, lower.length);
1245
+ }
1246
+
1247
+ // src/string/dash.ts
1248
+ function dash(str) {
1249
+ var _a;
1250
+ const parts = ((_a = str == null ? void 0 : str.replace(/([A-Z])+/g, capitalize)) == null ? void 0 : _a.split(/(?=[A-Z])|[\.\-\s_]/).map((x) => x.toLowerCase())) ?? [];
1251
+ if (parts.length === 0) {
1252
+ return "";
1253
+ }
1254
+ if (parts.length === 1) {
1255
+ return parts[0];
1256
+ }
1257
+ return parts.reduce((acc, part) => {
1258
+ return `${acc}-${part.toLowerCase()}`;
1259
+ });
1260
+ }
1261
+
1262
+ // src/string/pascal.ts
1263
+ function pascal(str) {
1264
+ const parts = (str == null ? void 0 : str.split(/[\.\-\s_]/).map((x) => x.toLowerCase())) ?? [];
1265
+ if (parts.length === 0) {
1266
+ return "";
1267
+ }
1268
+ return parts.map((str2) => str2.charAt(0).toUpperCase() + str2.slice(1)).join("");
1269
+ }
1270
+
1271
+ // src/string/snake.ts
1272
+ function snake(str, options) {
1273
+ const parts = (str == null ? void 0 : str.replace(/([A-Z])+/g, capitalize).split(/(?=[A-Z])|[\.\-\s_]/).map((x) => x.toLowerCase())) ?? [];
1274
+ if (parts.length === 0) {
1275
+ return "";
1276
+ }
1277
+ if (parts.length === 1) {
1278
+ return parts[0];
1279
+ }
1280
+ const result = parts.reduce((acc, part) => {
1281
+ return `${acc}_${part.toLowerCase()}`;
1282
+ });
1283
+ return (options == null ? void 0 : options.splitOnNumber) === false ? result : result.replace(/([A-Za-z]{1}[0-9]{1})/, (val) => `${val[0]}_${val[1]}`);
1284
+ }
1285
+
1286
+ // src/string/template.ts
1287
+ function template(str, data, regex = /\{\{(.+?)\}\}/g) {
1288
+ let result = "";
1289
+ let from = 0;
1290
+ let match;
1291
+ while (match = regex.exec(str)) {
1292
+ result += str.slice(from, match.index) + data[match[1]];
1293
+ from = regex.lastIndex;
1294
+ }
1295
+ return result + str.slice(from);
1296
+ }
1297
+
1298
+ // src/string/title.ts
1299
+ function title(str) {
1300
+ if (!str) {
1301
+ return "";
1302
+ }
1303
+ return str.split(/(?=[A-Z])|[\.\-\s_]/).map((s) => s.trim()).filter((s) => !!s).map((s) => capitalize(s.toLowerCase())).join(" ");
1304
+ }
1305
+
1306
+ // src/string/trim.ts
1307
+ function trim(str, charsToTrim = " ") {
1308
+ if (!str) {
1309
+ return "";
1310
+ }
1311
+ const toTrim = charsToTrim.replace(/[\W]{1}/g, "\\$&");
1312
+ const regex = new RegExp(`^[${toTrim}]+|[${toTrim}]+$`, "g");
1313
+ return str.replace(regex, "");
1314
+ }
1315
+
1316
+ // src/typed/isArray.ts
1317
+ var isArray = Array.isArray;
1318
+
1319
+ // src/typed/isDate.ts
1320
+ function isDate(value) {
1321
+ return isTagged(value, "[object Date]");
1322
+ }
1323
+
1324
+ // src/typed/isEmpty.ts
1325
+ function isEmpty(value) {
1326
+ if (value === true || value === false) {
1327
+ return true;
1328
+ }
1329
+ if (value === null || value === void 0) {
1330
+ return true;
1331
+ }
1332
+ if (isNumber(value)) {
1333
+ return value === 0;
1334
+ }
1335
+ if (isDate(value)) {
1336
+ return Number.isNaN(value.getTime());
1337
+ }
1338
+ if (isFunction(value)) {
1339
+ return false;
1340
+ }
1341
+ if (isSymbol(value)) {
1342
+ return false;
1343
+ }
1344
+ const length = value.length;
1345
+ if (isNumber(length)) {
1346
+ return length === 0;
1347
+ }
1348
+ const size = value.size;
1349
+ if (isNumber(size)) {
1350
+ return size === 0;
1351
+ }
1352
+ const keys2 = Object.keys(value).length;
1353
+ return keys2 === 0;
1354
+ }
1355
+
1356
+ // src/typed/isEqual.ts
1357
+ function isEqual(x, y) {
1358
+ if (Object.is(x, y)) {
1359
+ return true;
1360
+ }
1361
+ if (x instanceof Date && y instanceof Date) {
1362
+ return x.getTime() === y.getTime();
1363
+ }
1364
+ if (x instanceof RegExp && y instanceof RegExp) {
1365
+ return x.toString() === y.toString();
1366
+ }
1367
+ if (typeof x !== "object" || x === null || typeof y !== "object" || y === null) {
1368
+ return false;
1369
+ }
1370
+ const keysX = Reflect.ownKeys(x);
1371
+ const keysY = Reflect.ownKeys(y);
1372
+ if (keysX.length !== keysY.length) {
1373
+ return false;
1374
+ }
1375
+ for (let i = 0; i < keysX.length; i++) {
1376
+ if (!Reflect.has(y, keysX[i])) {
1377
+ return false;
1378
+ }
1379
+ if (!isEqual(x[keysX[i]], y[keysX[i]])) {
1380
+ return false;
1381
+ }
1382
+ }
1383
+ return true;
1384
+ }
1385
+
1386
+ // src/typed/isFloat.ts
1387
+ function isFloat(value) {
1388
+ return isNumber(value) && value % 1 !== 0;
1389
+ }
1390
+
1391
+ // src/typed/isFunction.ts
1392
+ function isFunction(value) {
1393
+ return typeof value === "function";
1394
+ }
1395
+
1396
+ // src/typed/isInt.ts
1397
+ var isInt = Number.isInteger;
1398
+
1399
+ // src/typed/isIntString.ts
1400
+ function isIntString(value) {
1401
+ if (!isString(value)) {
1402
+ return false;
1403
+ }
1404
+ const num = +value;
1405
+ return Number.isInteger(num) && `${num}` === value;
1406
+ }
1407
+
1408
+ // src/typed/isMap.ts
1409
+ function isMap(value) {
1410
+ return isTagged(value, "[object Map]");
1411
+ }
1412
+
1413
+ // src/typed/isNumber.ts
1414
+ function isNumber(value) {
1415
+ return typeof value === "number" && !Number.isNaN(value);
1416
+ }
1417
+
1418
+ // src/typed/isObject.ts
1419
+ function isObject(value) {
1420
+ return isTagged(value, "[object Object]");
1421
+ }
1422
+
1423
+ // src/typed/isPlainObject.ts
1424
+ function isPlainObject(value) {
1425
+ if (typeof value !== "object" || value === null) {
1426
+ return false;
1427
+ }
1428
+ const prototype = Object.getPrototypeOf(value);
1429
+ return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
1430
+ }
1431
+
1432
+ // src/typed/isPrimitive.ts
1433
+ function isPrimitive(value) {
1434
+ return value === void 0 || value === null || typeof value !== "object" && typeof value !== "function";
1435
+ }
1436
+
1437
+ // src/typed/isPromise.ts
1438
+ function isPromise(value) {
1439
+ return !!value && isFunction(value.then);
1440
+ }
1441
+
1442
+ // src/typed/isRegExp.ts
1443
+ function isRegExp(value) {
1444
+ return isTagged(value, "[object RegExp]");
1445
+ }
1446
+
1447
+ // src/typed/isSet.ts
1448
+ function isSet(value) {
1449
+ return isTagged(value, "[object Set]");
1450
+ }
1451
+
1452
+ // src/typed/isString.ts
1453
+ function isString(value) {
1454
+ return typeof value === "string";
1455
+ }
1456
+
1457
+ // src/typed/isSymbol.ts
1458
+ function isSymbol(value) {
1459
+ return typeof value === "symbol";
1460
+ }
1461
+
1462
+ // src/typed/isTagged.ts
1463
+ function isTagged(value, tag) {
1464
+ return Object.prototype.toString.call(value) === tag;
1465
+ }
1466
+
1467
+ // src/typed/isWeakMap.ts
1468
+ function isWeakMap(value) {
1469
+ return isTagged(value, "[object WeakMap]");
1470
+ }
1471
+
1472
+ // src/typed/isWeakSet.ts
1473
+ function isWeakSet(value) {
1474
+ return isTagged(value, "[object WeakSet]");
1475
+ }
1476
+ // Annotate the CommonJS export names for ESM import in node:
1477
+ 0 && (module.exports = {
1478
+ AggregateError,
1479
+ all,
1480
+ alphabetical,
1481
+ assign,
1482
+ boil,
1483
+ callable,
1484
+ camel,
1485
+ capitalize,
1486
+ chain,
1487
+ clone,
1488
+ cluster,
1489
+ compose,
1490
+ construct,
1491
+ counting,
1492
+ crush,
1493
+ dash,
1494
+ debounce,
1495
+ defer,
1496
+ diff,
1497
+ draw,
1498
+ filterKey,
1499
+ first,
1500
+ flat,
1501
+ flip,
1502
+ fork,
1503
+ get,
1504
+ group,
1505
+ guard,
1506
+ inRange,
1507
+ intersects,
1508
+ invert,
1509
+ isArray,
1510
+ isDate,
1511
+ isEmpty,
1512
+ isEqual,
1513
+ isFloat,
1514
+ isFunction,
1515
+ isInt,
1516
+ isIntString,
1517
+ isMap,
1518
+ isNumber,
1519
+ isObject,
1520
+ isPlainObject,
1521
+ isPrimitive,
1522
+ isPromise,
1523
+ isRegExp,
1524
+ isSet,
1525
+ isString,
1526
+ isSymbol,
1527
+ isTagged,
1528
+ isWeakMap,
1529
+ isWeakSet,
1530
+ iterate,
1531
+ keys,
1532
+ last,
1533
+ lerp,
1534
+ list,
1535
+ listify,
1536
+ lowerize,
1537
+ map,
1538
+ mapEntries,
1539
+ mapKeys,
1540
+ mapValues,
1541
+ mapify,
1542
+ max,
1543
+ memo,
1544
+ merge,
1545
+ min,
1546
+ objectify,
1547
+ omit,
1548
+ once,
1549
+ parallel,
1550
+ partial,
1551
+ partob,
1552
+ pascal,
1553
+ pick,
1554
+ proxied,
1555
+ random,
1556
+ range,
1557
+ reduce,
1558
+ replace,
1559
+ replaceOrAppend,
1560
+ retry,
1561
+ round,
1562
+ select,
1563
+ selectFirst,
1564
+ series,
1565
+ set,
1566
+ shake,
1567
+ shift,
1568
+ shuffle,
1569
+ sift,
1570
+ sleep,
1571
+ snake,
1572
+ sort,
1573
+ sum,
1574
+ template,
1575
+ throttle,
1576
+ title,
1577
+ toFloat,
1578
+ toInt,
1579
+ toggle,
1580
+ trim,
1581
+ try: null,
1582
+ tryit,
1583
+ uid,
1584
+ unique,
1585
+ unzip,
1586
+ upperize,
1587
+ zip,
1588
+ zipToObject
1589
+ });